Mongodb-按值分组并获取计数
我有一个聚合查询,它返回如下结果Mongodb-按值分组并获取计数,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有一个聚合查询,它返回如下结果 { count:1, status: 'FAILED', article_id: 1 }, { count:1, status: 'DELIVERED', article_id: 1 } 我想根据文章编号分组,并根据状态获取计数,如下所示: { article_id:1, FAILED:1, DELIVERED:2
{
count:1,
status: 'FAILED',
article_id: 1
},
{
count:1,
status: 'DELIVERED',
article_id: 1
}
我想根据文章编号分组,并根据状态获取计数,如下所示:
{
article_id:1,
FAILED:1,
DELIVERED:2
}
如何存档此文件?
提前谢谢
{
$group:{
_id:"$_id",
articleId:{$addToset:"$article_id"},
failed:{$addToset:"$failed"},
delivered:{$addToset:"$delivered"}
}
},
{ $addFields:{
article_id:{$size:articleId},
fail:{$size:"$faild"},
deliver:{$size:"$faild"},
}
在组中,$addToSet将返回数组,在addField中将返回数组的总长度。你可以在mongo搜索$size
}试试这段代码
db.getCollection('artwork').aggregate([
{
$group: {
_id: '$article_id',
FAILED: {
'$sum': {
"$cond": [{ "$eq": ["$status", "FAILED"] }, 1, 0]
}
},
DELIVERED: {
'$sum': {
"$cond": [{ "$eq": ["$status", "DELIVERED"] }, 1, 0]
}
}
}
}
])
其他答案原则上可能有效,但它们仅限于硬编码状态
失败
和交付
如果您希望为任意状态提供通用解决方案,可以使用此解决方案:
db.collection.aggregate([
{ $set: { data: [{ k: "$status", v: "$count" }] } },
{
$replaceRoot: {
newRoot: {
$mergeObjects: [
{ $arrayToObject: "$data" }, { article_id: "$article_id" }
]
}
}
},
{
$group: {
_id: "$article_id",
status: { $push: "$$ROOT" }
}
},
{ $set: { status: { $mergeObjects: ["$status"] } } },
{ $replaceRoot: { newRoot: "$status" } },
])
我认为您必须使用
{$sum:{…$count',0}}
而不是{$sum:{…1,0}