使用 MongoDB 聚合计数子数据
using MongoDB aggregate count subdata
这是我在 mongodb 中的数据:
{
"data": {
"order_goods": [{
"category": 235
}, {
"category": 666
}]
}
}, {
"data": {
order_goods: [{
"category": 235
}]
}
}
这是我的预期输出:
{"category":235, "total":2}
{"category":666, "total":1}
我尝试了很多关于聚合的方法,比如$group
,但结果总是这样:
{ "_id" : [ 235, 666 ], "total" : 1 }
{ "_id" : [ 235 ], "total" : 1 }
感谢您的帮助。
试试这个
db.test.aggregate([{ "$unwind":"$data.order_goods"}, {"$group":{_id:"$data.order_goods.category","count":{$sum:1}}}])
说明:当您尝试在没有 $unwind 的情况下进行分组时,mongodb 认为 order_goods 的完整数组是唯一的,因此您需要先 $unwind 才能分组个人类别。
请尝试以下查询:
db.collection.aggregate(
[
{ "$unwind": "$data.order_goods" },
{ "$group" : { "_id" : "$data.order_goods.category",
"total": {"$sum":1} } },
{ "$project" : { "category" : "$_id" , total : 1 }
]
);
这是我在 mongodb 中的数据:
{
"data": {
"order_goods": [{
"category": 235
}, {
"category": 666
}]
}
}, {
"data": {
order_goods: [{
"category": 235
}]
}
}
这是我的预期输出:
{"category":235, "total":2}
{"category":666, "total":1}
我尝试了很多关于聚合的方法,比如$group
,但结果总是这样:
{ "_id" : [ 235, 666 ], "total" : 1 }
{ "_id" : [ 235 ], "total" : 1 }
感谢您的帮助。
试试这个
db.test.aggregate([{ "$unwind":"$data.order_goods"}, {"$group":{_id:"$data.order_goods.category","count":{$sum:1}}}])
说明:当您尝试在没有 $unwind 的情况下进行分组时,mongodb 认为 order_goods 的完整数组是唯一的,因此您需要先 $unwind 才能分组个人类别。
请尝试以下查询:
db.collection.aggregate(
[
{ "$unwind": "$data.order_goods" },
{ "$group" : { "_id" : "$data.order_goods.category",
"total": {"$sum":1} } },
{ "$project" : { "category" : "$_id" , total : 1 }
]
);