MongoDB在组阶段使用逻辑OR
我有一个MongoDB集合,看起来像这样:MongoDB在组阶段使用逻辑OR,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有一个MongoDB集合,看起来像这样: {用户:“1”,likes:111,isEnabled:true}, {用户:“1”,likes:222,isEnabled:false}, {用户:“2”,喜欢:333,isEnabled:false}, {用户:“2”,likes:444,isEnabled:false}, 我想按用户对它们进行汇总,汇总喜欢的内容,并检查用户的某个文档是否有“isEnabled”=true(基本上是逻辑OR) 我希望在最后得到这个结果: {user: "
{用户:“1”,likes:111,isEnabled:true},
{用户:“1”,likes:222,isEnabled:false},
{用户:“2”,喜欢:333,isEnabled:false},
{用户:“2”,likes:444,isEnabled:false},
我想按用户对它们进行汇总,汇总喜欢的内容,并检查用户的某个文档是否有“isEnabled”=true(基本上是逻辑OR)
我希望在最后得到这个结果:
{user: "1", allLikes: "333", isAnyEnabled: true},
{user: "2", allLikes: "777", isAnyEnabled: false},
我可以使用组
阶段的$sum
累加器来总结类似内容。我的问题是似乎没有支持布尔逻辑运算的group
操作符。有没有办法做到这一点
我已经试过了
db.myCollection.aggregate([{$match: {
"_id":"$user",
"allLikes": {
"$sum": "$likes"
},
"isAnyEnabled":{"$or":"$isEnabled"}
}}])
但这似乎不支持$或
:未知组运算符“$或”
您可以在这样的项目阶段中使用:
- 首先通过
对\u id
进行排序,以获得所有相似项,并且所有$group
值的列表均已启用
- 然后使用
检查是否至少存在一个$anyElementTrue
,然后true
为真或假isAnyEnabled
db.collection.aggregate([
{
"$group": {
"_id": "$user",
"allLikes": {
"$sum": "$likes"
},
"enabled": {
"$push": "$isEnabled"
}
}
},
{
"$project": {
"_id": "$_id",
"allLikes": "$allLikes",
"isAnyEnabled": {
"$anyElementTrue": [
"$enabled"
]
}
}
}
])