我有一个这样的集合:
{
"_id": ObjectID(1),
"fruits": [Banana, Banana, Apple]
}
{
"_id": ObjectID(2),
"fruits": [Apple]
}
我想要得到数组数据的计数,比如第一个对象是2个香蕉和1个苹果;1个苹果第二对象。
我该怎么做?
-
$unwind
-将fruits
数组分解为多个文档 -
$group
-由_id
和fruits
组成。执行计数。 -
$group
-按_id._id
分组。Push object intofruits
数组 -
$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
}
}
]