2017-07-11 52 views
0

我想從使用nodejs和貓鼬的查詢中得到一個子組。 我想要做的事是: 我有這個集合: enter image description here enter image description here子組Mongoose

我需要統計和組都具有相同的「意圖」的文件,並進行分組與「實體「值,到目前爲止,我有這個運行: 嘗試{

//We first get the total interactions from all workspace 
    let workspace = await Interaction.aggregate([ 
     { $match: { dateAdded: { $gte: todayStart, $lt: todayEnd }, workspace: workspaceID } }, 
     { $group: { _id: "$workspace", data: { $sum: 1 } } }, 
     { $sort: { _id: 1 } } 
    ]).exec(); 

    //We then get the total results from conversations 
    let results = await Interaction.aggregate([ 
     { $match: { dateAdded: { $gte: todayStart, $lt: todayEnd }, workspace: workspaceID } }, 
     { $group: { _id: '$intent', data: { $sum: 1 } } }, 
     { $sort: { _id: 1 } } 
    ]).exec() 
    //workspaceItems = workspace.map(function (Interaction) { return Interaction._id; }); 

    return res.json({ 
     total: workspace, 
     result: results 
    }) 

} catch (err) { 
    console.log(err); 
    return res.status(500).send(err) 
} 

結果是這樣的:

{ 
"total": [ 
    { 
     "_id": "Business", 
     "data": 23 
    } 
], 
"result": [ 
    { 
     "_id": "N/A", 
     "data": 2 
    }, 
    { 
     "_id": "PRODUCTO_BENEFICIOS", 
     "data": 3 
    }, 
    { 
     "_id": "PRODUCTO_DESCRIPCION", 
     "data": 10 
    }, 
    { 
     "_id": "REPORTE_TARJETA_PERDIDA", 
     "data": 1 
    }, 
    { 
     "_id": "REQUISITOS", 
     "data": 7 
    } 
] 

}

我需要的結果是這樣的:

{ 
"total": [ 
    { 
     "_id": "Business", 
     "data": 23 
    } 
], 
"result": [ 
    { 
     "_id": "N/A", 
     "data": 2 
    }, 
    { 
     "_id": "PRODUCTO_BENEFICIOS", 
     "entities: [{"TARJETAS","PROMOCIONES"."ETC..."}], 
     "data": 3 
    }, 
    { 
     "_id": "PRODUCTO_DESCRIPCION", 
     "entities: [{"TARJETAS","PROMOCIONES"."ETC..."}], 
     "data": 10 
    }, 
    { 
     "_id": "REPORTE_TARJETA_PERDIDA", 
     "entities: [{"TARJETAS","PROMOCIONES"."ETC..."}], 
     "data": 1 
    }, 
    { 
     "_id": "REQUISITOS", 
     "entities: [{"TARJETAS","PROMOCIONES"."ETC..."}], 
     "data": 7 
    } 
] 

}

我希望是明確的,請讓我知道如果你知道如何使用貓鼬做到這一點。 預先感謝您。

回答

1

嘗試改變第二查詢到以下

let results = await Interaction.aggregate([ 
    { $match: { dateAdded: { $gte: todayStart, $lt: todayEnd }, workspace: workspaceID } }, 
    { $group: { _id: '$intent', entities: {$push: "$entity"}, data: { $sum: 1 } } }, 
    { $sort: { _id: 1 } } 
]).exec() 

如果你想實體的唯一列表,您可以使用$addToSet代替$push