Mongodb 计算相同值在数组中出现的次数
在聚合中分组后,我有如下元素:Mongodb 计算相同值在数组中出现的次数,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,在聚合中分组后,我有如下元素: {_id: ID, items: ["yes", "no", "yes", "no", "no", "yes", "no", "no", "no"]} 我想预测某个值在items数组中存在多少次 以以下格式的文档结束: {_id: ID, yes: 3, no: 6} 您可以在聚合管道中再添加两个阶段 { $unwind: '$items' } 然后再按项目分组 { $group: { _id: '$items', count: { $sum: 1 }}}
{_id: ID, items: ["yes", "no", "yes", "no", "no", "yes", "no", "no", "no"]}
我想预测某个值在items数组中存在多少次
以以下格式的文档结束:
{_id: ID, yes: 3, no: 6}
您可以在聚合管道中再添加两个阶段
{ $unwind: '$items' }
然后再按项目分组
{ $group: { _id: '$items', count: { $sum: 1 }}}
这将生成如下数组:
[{ _id: 'yes', count: 3}, { _id: 'no', count: 6}]
使用和运算符的组合,根据给定条件筛选项目数组并分别返回计数。例如,运行以下管道以获得所需的结果。当然,这假定项目列表中的不同二进制元素
“yes”
和“no”
事先已知:
db.collection.aggregate([
{
"$project": {
"yes": {
"$size": {
"$filter": {
"input": "$items",
"as": "item",
"cond": {
"$eq": ["$$item", "yes"]
}
}
}
},
"no": {
"$size": {
"$filter": {
"input": "$items",
"as": "item",
"cond": {
"$eq": ["$$item", "no"]
}
}
}
}
}
}
])
对于事先不知道不同元素的解决方案,则需要项数组,将展开的文档分组并将计数聚合为:
db.collection.aggregate([
{ "$unwind": "$items" },
{
"$group": {
"_id": "$items",
"id": { "$first": "$_id" },
"count": { "$sum": 1 }
}
},
{
"$group": {
"_id": "$id",
"counts": {
"$push": {
"item": "$_id",
"count": "$count"
}
}
}
}
])
样本输出
{
"_id" : ID,
"counts" : [
{
"item" : "yes",
"count" : 3
},
{
"item" : "no",
"count" : 6
}
]
}
db.collection.aggregate([
“$project”:{
_id:1,
“是”:{
$size:{
“$map”:{
输入:“$items”,
如:“是”,
在:{“$eq”:[“$$Yes”,“Yes”]}
}
}
}
“否”:{
“$size”:{
“$map”:{
输入:“$items”,
如:“否”,
在:{“$eq”:[“$$No”,“No”]}
}
}
}
}
])