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

Mongodb Tentativo di ottenere i campi selezionati da restituire dall'aggregato

In gran parte parlando qui, $project si basa sul "percorso assoluto" alla proprietà del campo nel documento sul lato "destra". Scorciatoie come 1 sono solo per il punto in cui quell'elemento è effettivamente il livello più alto del documento.

Inoltre devi essere in grado di conservare i campi quando $group , quindi è qui che utilizzi vari operatori di raggruppamento come $first e $addToSet o $push per mantenere le informazioni che stai estraendo dall'array interno. E devi $unwind anche due volte qui poiché stai combinando "tipi" tra documenti e non vuoi solo il $first in questo caso.

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

});