MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Recupera i documenti secondari che corrispondono al valore massimo nella matrice

Il modo migliore per farlo è in MongoDB 3.2 o versioni successive. Dobbiamo $project i nostri documenti e utilizzare il $filter operatore per restituire un sottoinsieme dell'array "topicInfo" che corrisponde alla nostra condizione. E a partire da MongoDB3.2 , possiamo utilizzare $max nel $project fase nella cond ition ed eseguire un'operazione logica sul valore restituito.

La fase finale della pipeline è il $match fase in cui filtri i documenti con "topicInfo" vuoto utilizzando $exists operatore di query dell'elemento e notazione punto per accedere al primo elemento dell'array. Ciò riduce anche la quantità di dati inviati via cavo e il tempo e la memoria utilizzati per decodificare i documenti lato client.

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 } } }
])