MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongodb Es wird versucht, ausgewählte Felder aus dem Aggregat zurückzugeben

Hier im Großen und Ganzen $project stützt sich auf den "absoluten Pfad" zur Feldeigenschaft im Dokument auf der "rechten" Seite. Abkürzungen wie 1 sind nur dort, wo dieses Element tatsächlich die oberste Ebene des Dokuments ist.

Außerdem müssen Sie in der Lage sein, Felder beizubehalten, wenn Sie $group , hier verwenden Sie also verschiedene Gruppierungsoperatoren wie $first und $addToSet oder $push um die Informationen zu behalten, die Sie aus dem inneren Array ziehen. Und Sie müssen $unwind auch hier zweimal, da Sie "Typen" über Dokumente hinweg kombinieren und nicht nur den $first in diesem Fall.

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) {

});