MongoDB在组阶段使用逻辑OR

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: "

我有一个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", 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"
        ]
      }
    }
  }
])