[英]How can I have the aggregated values based with custom fields using mongoDB/mongoose aggregation pipeline?
[英]Select fields' values as array mongoose / mongodb aggregation
我有一个mongo查询
db.memberships.aggregate([{
'$match': {
unit: new ObjectId('566fbaa1e63225b10bacac44')
}
},
{
'$lookup': {
from: 'seasons',
localField: 'season',
foreignField: '_id',
as: 'season'
}
},
{
'$unwind': '$season'
},
{
'$project': {
season: {
'name': '$season.name',
'id': '$season._id'
}
}
},
{
'$group': {
_id: '$_id',
'season': {
'$addToSet': '$season'
}
}
},
]);
导致
[
{
"_id": ObjectId("56a0e5a860d8a6e41eda2ea3"),
"season": [{
"name": "Summer",
"id": ObjectId("56a0d6c692c26b8c019a2758")
}]
},
{
"_id": ObjectId("56a0e56d60d8a6e41eda2e9e"),
"season": [{
"name": "Summer",
"id": ObjectId("56a0d6c692c26b8c019a2758")
}]
},
{
"_id": ObjectId("56a0e53860d8a6e41eda2e9a"),
"season": [{
"name": "Summer",
"id": ObjectId("56a0d6c692c26b8c019a2758")
}]
},
{
"_id": ObjectId("56a0e4d660d8a6e41eda2e94"),
"season": [{
"name": "Winter",
"id": ObjectId("5680dc01ba1e41f5066526fa")
}]
}
]
我需要以这种格式获取结果
{
_id: [
// ids here
],
seasons: [{
id: '56a0d6c692c26b8c019a2758',
'name': 'Summer'
},
{
id: '5680dc01ba1e41f5066526fa',
'name': 'Winter'
}
]
}
查询必须返回具有2个属性id
和season
的单个文档。 季节必须是一系列独特的季节。 每个季节都应包含一个ID和一个名称。 感谢帮助!
使用$group
步骤重构管道,使其_id
值为null
以计算所有输入文档整体的累积值,从而将id字段创建为所有唯一id的数组:
var pipeline = [
{
'$match': {
unit: new ObjectId('566fbaa1e63225b10bacac44')
}
},
{
'$lookup': {
from: 'seasons', localField: 'season', foreignField: '_id', as: 'season'
}
},
{
'$unwind' : '$season'
},
{
'$project': {
season: {'name': '$season.name', 'id' : '$season._id'}
}
},
{
'$group': {
"_id": null,
"id": { "$addToSet": "$_id" },
'season': {
'$addToSet': '$season'
}
}
}
];
db.memberships.aggregate(pipeline);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.