【问题标题】:How to query an array for different combinations of ANDs and ORs in MongoDB Aggregation?如何在 MongoDB 聚合中查询数组以获取 AND 和 OR 的不同组合?
【发布时间】:2019-07-15 16:32:52
【问题描述】:

我正在尝试使用逻辑 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)但失败了。

【问题讨论】:

  • 你能出示样本文件吗
  • @AnthonyWinzlet 我更新了问题

标签: arrays mongodb aggregate logical-operators


【解决方案1】:

其实$or是顶级运算符,你用错了

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

【讨论】:

  • 此查询在语法上有效,但我认为它不会给出正确的结果。我的数据库中有学生完成了 "course 1" 和 "course 2" 。对我来说,它只返回了一个完成“课程 3”的学生。
  • 我想我必须使用$all 而不是$eq。你能确认一下吗?
  • 如果您想获取所有完成所有三门课程的学生,只需使用{ "courses": { "$in": ["Course 1", "Course 2","Course 3"] }}
  • 你能用一些样本收集和输出解释一下吗
  • 将上面的$eq 更改为$all,我会接受你的回答。 imgur.com/a/Kvub8wX
猜你喜欢
  • 2021-09-10
  • 2012-06-18
  • 2021-06-18
  • 1970-01-01
  • 1970-01-01
  • 2019-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多