【问题标题】:MongoDB count documents for each array elementsMongoDB 计算每个数组元素的文档
【发布时间】:2019-12-15 23:01:35
【问题描述】:
我h
{
code : "X1",
elements : ["A", "B", "C", "D"]
},
{
code : "X2",
elements : ["C", "D"]
},
{
code : "X3",
elements : ["A"]
}
...
我想知道“元素”数组中每种类型的值存在的文档数量。
es。
是的。
"A" : 2
"B" : 1
"C" : 2
"D" : 2
单个查询是否可行?
【问题讨论】:
标签:
mongodb
aggregation-framework
【解决方案1】:
你可以$unwind你的数组来获取每个元素的单个文档,然后运行$group来计算元素:
db.collection.aggregate([
{
$unwind: "$elements"
},
{
$group: {
_id: "$elements",
count: { $sum: 1 }
}
}
])
编辑:您可以使用带有 $replaceRoot 和 $arrayToObject 的附加组将您的 id 作为键返回并将计数作为值:
db.collection.aggregate([
{
$unwind: "$elements"
},
{
$group: {
_id: "$elements",
count: { $sum: 1 }
}
},
{
$group: {
_id: null,
counts: { $push: { k: "$_id", v: "$count" } }
}
},
{
$replaceRoot: {
newRoot: { $arrayToObject: "$counts" }
}
}
])
Mongo Playground