MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Trouver tous les documents qui partagent max(value) trouvés dans l'étape agrégée

Vous pouvez le faire en regroupant sur num_sold puis en utilisant $sort et $limit étapes du pipeline pour obtenir uniquement les documents avec la valeur maximale :

db.t.aggregate([
    // Group by num_sold, assembling an array of docs with each distinct value.
    {$group: {
        _id: '$num_sold',
        docs: {$push: '$$ROOT'}
    }},
    // Sort the groups by _id descending to put the max num_sold group first.
    {$sort: {_id: -1}},
    // Return just the first (max num_sold) group of docs.
    {$limit: 1}
])

Sortie :

{ 
    "_id" : 55.0, 
    "docs" : [
        {
            "_id" : ObjectId("5726a62879ce3350ff8d607e"), 
            "item" : "Orange", 
            "num_sold" : 55.0
        }, 
        {
            "_id" : ObjectId("5726a62879ce3350ff8d607f"), 
            "item" : "Peach", 
            "num_sold" : 55.0
        }
    ]
}