如何在MongoDB聚合中查询数组以获取AND和OR的不同组合?

时间:2019-02-21 17:05:27

标签: arrays mongodb aggregate logical-operators

我正在尝试搜索使用逻辑AND和OR的不同组合完成课程的学生列表。

例如,我想让学生完成(“课程1”和“课程2”)或“课程3”

这是我给每个学生的数据结构:

{
      "_id" : ObjectId("5c68841cb6b18f31975c8fb0"),
      "courses" :  [ 
           "Course 1", "Course 4"
        ]
}

这是我的代码:

db.getCollection('users').aggregate([
    {
        $match: { 
            "courses": {
                $or: {
                    $all: ["Course 1","Course 2"],
                    $in : ["Course 3"]
                 }
            }
        }
    }
])

我尝试嵌套不同的运算符($all$in$and$or),但失败了。

1 个答案:

答案 0 :(得分:3)

实际上$or是顶级运算符,您以错误的方式使用了它

db.collection.aggregate([
  { "$match": {
    "$or": [
      { "courses": { "$all": ["Course 1", "Course 2"] }},
      { "courses": { "$in": ["Course 3"] }}
    ]
  }}
])