mongodb - MongoDB 在小组赛中使用逻辑或
问题描述
我有一个 MongoDB 集合,如下所示:
{user: "1", likes: 111, isEnabled: true},
{user: "1", likes: 222, isEnabled: false},
{user: "2", likes: 333, isEnabled: false},
{user: "2", likes: 444, isEnabled: false},
我想按用户对它们进行汇总,总结喜欢并检查用户的文档之一是否具有“isEnabled”= true(基本上是逻辑或)。
最后我想要这个结果:
{user: "1", allLikes: "333", isAnyEnabled: true},
{user: "2", allLikes: "777", isAnyEnabled: false},
我可以使用舞台的$sum
累加器group
来总结喜欢。我的问题是似乎没有group
支持布尔逻辑运算的运算符。有没有办法做到这一点?
到目前为止我试过这个
db.myCollection.aggregate([{$match: {
"_id":"$user",
"allLikes": {
"$sum": "$likes"
},
"isAnyEnabled":{"$or":"$isEnabled"}
}}])
但似乎$or
不支持此:unknown group operator '$or'
解决方案
您可以$anyElementTrue
在这样的项目阶段使用:
- 首先
$group
得到_id
所有喜欢的总和和所有isEnabled
值的列表 - 然后用于
$anyElementTrue
检查是否至少有一个true
然后isAnyEnabled
是真假。
db.collection.aggregate([
{
"$group": {
"_id": "$user",
"allLikes": {
"$sum": "$likes"
},
"enabled": {
"$push": "$isEnabled"
}
}
},
{
"$project": {
"_id": "$_id",
"allLikes": "$allLikes",
"isAnyEnabled": {
"$anyElementTrue": [
"$enabled"
]
}
}
}
])
这里的例子
推荐阅读
- c# - 使用 WPF 工具包将 ComboBox 转换为 AutoCompleteBox
- ios - 在 Xcode 12 / Swift 5 中将 SwiftUI 按钮链接到视图控制器
- c# - `scalr` 变量在哪里
- python - 从字典和列表框中删除项目
- reactjs - 如何重置嵌套导航器(react-navigation v5)
- mysql - 此查询的最佳索引是什么?
- r - 如何在R中计算所有国家和美国之间的地理和语言距离
- java - 列表流过滤不正确
- performance - 无法解决灯塔警告“考虑使用链接 rel=preload”
- python - 更改所有 QLabel 对象 PyQt5 的字体大小