给出以下示例数据集:
[
{
_id: 1,
prices: [1,2,3],
category: 'stuff'
},
{
_id: 2,
prices: [4,5,6],
category: 'stuff'
},
{
_id: 3,
prices: [7,8,9],
category: 'misc'
}
];
如何获取如下所示的数据:
[
{
_id: 1,
prices: 6,
category: 'stuff'
},
{
_id: 2,
prices: 15,
category: 'stuff'
},
{
_id: 3,
prices: 24,
category: 'misc'
}
]
我可以得到这个:
[
{
_id: 1,
prices: 6
},
{
_id: 2,
prices: 15
},
{
_id: 3,
prices: 24
}
]
通过使用这样的东西:
[
{ $unwind: '$prices' },
{ $group: { _id: '$_id', prices: { $sum: '$prices' } } },
{ $project: { prices: 1 } }
]
但我无法弄清楚如何让它包含"类别"。
答案 0 :(得分:1)
执行此操作的最佳方法是在$sum
阶段使用$project
累加器运算符的MongoDB 3.2或更高版本。
db.collection.aggregate([
{ "$project": {
"price": { "$sum": "$prices" },
"category": "$category"
}}
])
产生:
{ "_id" : 1, "category" : "stuff", "price" : 6 }
{ "_id" : 2, "category" : "stuff", "price" : 15 }
{ "_id" : 3, "category" : "misc", "price" : 24 }
在MongoDB版本< = 3.0中,您需要使用$first
运算符。
db.collection.aggregate([
{ $unwind: '$prices' },
{ $group: {
_id: '$_id',
prices: { $sum: '$prices' },
category: { '$first': '$category' }
}}
])