MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Mongodb Tentando obter campos selecionados para retornar do agregado


Falando basicamente aqui, $project depende do "caminho absoluto" para a propriedade do campo no documento no lado "direito". Atalhos como 1 são apenas para onde esse elemento é realmente o nível superior do documento.

Além disso, você precisa ser capaz de reter campos quando $group , então é aqui que você usa vários operadores de agrupamento, como $first e $addToSet ou $push para manter as informações que você está extraindo do array interno. E você deve $unwind duas vezes aqui também, pois você está combinando "tipos" em documentos e não deseja apenas o $first nesse 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) {

});