MongoDB. Получить документы, поле массива которых содержит только слова из запроса - PullRequest
0 голосов
/ 15 февраля 2020

Возможно ли в mongodb найти документы, в которых все слова в поле содержатся в запросе, а не наоборот?

псевдопросмотр:

{title: 
    {$in: ["the", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"]}
}

документы:

{'title': ["brown", "fox"}    #true
{'title': ["lazy", "dog"]}    #true
{'title': ["lazy", "dog", "sleep"]}    #false 'sleep' not in query
{'title': ["brown", "dog"]}    #true
{'title': ["jumps", "quick"]}    #true
{'title': ["smile", "fox"]}    #false 'smile' not in query

1 Ответ

1 голос
/ 15 февраля 2020

Агрегирование MongoDB предлагает больше операций, чем стандартный метод .find.

Принимает два или более массивов и возвращает массив, содержащий элементы, которые появляются в каждом входном массиве. https://docs.mongodb.com/manual/reference/operator/aggregation/setIntersection/#exp ._ S_setIntersection

Как только мы получим пересечение, мы сравниваем размер массива (я предполагаю, что ваши массивы не могут иметь повторяющиеся значения)

db.collection.aggregate([
  {
    $match: {
      $expr: {
        $eq: [
          {
            $size: "$title"
          },
          {
            $size: {
              $setIntersection: [
                "$title",
                [
                  "the",
                  "quick",
                  "brown",
                  "fox",
                  "jumps",
                  "over",
                  "the",
                  "lazy",
                  "dog"
                ]
              ]
            }
          }
        ]
      }
    }
  }
])

MongoPlayground

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...