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

Mongodb Essayer de faire revenir les champs sélectionnés à partir de l'agrégat

En gros ici, $project s'appuie sur le "chemin absolu" de la propriété de champ dans le document sur le côté "droit". Raccourcis tels que 1 sont juste là où cet élément est en fait le niveau supérieur du document.

Vous devez également pouvoir conserver les champs lorsque vous $group , c'est donc ici que vous utilisez divers opérateurs de regroupement tels que $first et $addToSet ou $push pour conserver les informations que vous extrayez du tableau interne. Et vous devez $unwind deux fois ici aussi puisque vous combinez des "types" à travers des documents, et vous ne voulez pas seulement le $first dans ce cas.

OrderModel.aggregate([
    { "$unwind": "$products" },
    { "$unwind": "$products.types" },
    { "$group": {
        "_id": "$products.name",
        "active": { "$first": "$products.active" },
        "types": { "$addToSet": "$products.types" },
        "quantity": { "$sum": 1 }
    }},
    { "$project": {
        "_id": 0,
        "name": "$_id",
        "active": 1,
        "types": 1,
        "quantity": 1
    }}
],function(err,results) {

});