sql >> Database >  >> NoSQL >> MongoDB

Subdocumenten ophalen die overeenkomen met de maximale waarde in de array

De optimale manier om dit te doen is in MongoDB 3.2 of nieuwer. We moeten $project onze documenten en gebruik de $filter operator om een ​​subset van de array "topicInfo" te retourneren die overeenkomt met onze voorwaarde. En vanaf MongoDB3.2 kunnen we de $max in het $project stadium in de cond ition-expressie en voer een logische bewerking uit op de geretourneerde waarde.

De laatste fase in de pijplijn is de $match fase waarin u die documenten uitfiltert met lege "topicInfo" met behulp van de $exists element query-operator en de puntnotatie om toegang te krijgen tot het eerste element in de array. Dit vermindert ook zowel de hoeveelheid gegevens die over de kabel worden verzonden als de tijd en het geheugen die worden gebruikt om documenten aan de clientzijde te decoderen.

db.collection.aggregate([
    { "$project": { 
        "topicInfo": { 
            "$filter": { 
                "input": "$topicInfo", 
                "as": "t", 
                "cond": { 
                    "$and": [ 
                        { "$eq": [ "$$t.topic", "topic2"] }, 
                        { "$eq": [ "$$t.time", { "$max": "$topicInfo.time" } ] }
                    ] 
                } 
            } 
        } 
    }},
    { "$match": { "topicInfo.0": { "$exists": true } } }
])


  1. Hoe krijg ik Spring-Data-MongoDB om mijn objecten te valideren?

  2. Verborgen RFC3339 DateTime to Date in java

  3. Bindende dynamische serverreactie (geneste json)

  4. Is het mogelijk om de sleutel te definiëren bij het invoegen in mongodb