Как запросить массив для различных комбинаций AND и OR в агрегации MongoDB? - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь найти список студентов, которые закончили курсы, используя различные комбинации логических 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 голосов
/ 21 февраля 2019

На самом деле $or является оператором верхнего уровня, и вы использовали его неправильно

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