sql >> Base de Datos >  >> NoSQL >> MongoDB

Mongodb Intentando que los campos seleccionados regresen del agregado

En términos generales aquí, $project se basa en la "ruta absoluta" a la propiedad de campo en el documento en el lado "derecho". Atajos como 1 son solo para donde ese elemento es en realidad el nivel superior del documento.

También debe poder retener campos cuando $group , así que aquí es donde usa varios operadores de agrupación como $first y $addToSet o $push para mantener la información que está extrayendo de la matriz interna. Y debe $unwind dos veces aquí también, ya que está combinando "tipos" entre documentos, y no desea solo $first en este 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) {

});