如何在mongodb组数组值计数?



我有一个这样的集合:

{
"_id": ObjectID(1),
"fruits": [Banana, Banana, Apple]
}
{
"_id": ObjectID(2),
"fruits": [Apple]
}

我想要得到数组数据的计数,比如第一个对象是2个香蕉和1个苹果;1个苹果第二对象。

我该怎么做?

  1. $unwind-将fruits数组分解为多个文档

  2. $group-由_idfruits组成。执行计数。

  3. $group-按_id._id分组。Push object intofruits数组

  4. $set-设置fruits为键值对。

db.collection.aggregate([
{
$unwind: "$fruits"
},
{
$group: {
_id: {
_id: "$_id",
fruit: "$fruits"
},
count: {
$sum: 1
}
}
},
{
$group: {
_id: "$_id._id",
fruits: {
$push: {
k: "$_id.fruit",
v: "$count"
}
}
}
},
{
$set: {
fruits: {
$arrayToObject: "$fruits"
}
}
}
])

Mongo Playground示例

输出
[
{
"_id": 2,
"fruits": {
"Apple": 1
}
},
{
"_id": 1,
"fruits": {
"Apple": 1,
"Banana": 2
}
}
]

相关内容

  • 没有找到相关文章

最新更新