Запрос массива и игнорирование порядка элементов - PullRequest
0 голосов
/ 10 марта 2020

Рассмотрим отчет, который содержит:

{
  "name": "n1",
  "version": "1.0",
  "ids": ["ABC", "XYZ"]
}

Я хочу найти все отчеты, содержащие это имя, версию и идентификаторы. Итак, я построил:

.find({ "name": "n1", "version": "1.0", "ids": ["ABC", "XYZ"]})

Но проблема в том, что я не знаю порядок элементов в массиве ids. Таким образом, следующий запрос не будет возвращать отчеты:

.find({ "name": "n1", "version": "1.0", "ids": ["XYZ","ABC"]})

Как я могу сказать, что запрос соответствует, если массив содержит точно элементы? Использование MongoDB 3.2 и Pymon go.

Ответы [ 2 ]

1 голос
/ 10 марта 2020

Вам необходимо объединить $ size с $ all, например:

Оператор $all выбирает документы, в которых значение поля равно an массив, содержащий все указанные элементы

Оператор $size сопоставляет любой массив с количеством элементов , указанным в аргументе

{
  "cast": {
    $all: ['Peter Courtney', 'James J. Corbett'],
    $size : 2
  }
}

Но будьте осторожны, потому что это может быть очень дорогой операцией.

0 голосов
/ 10 марта 2020

Вы можете использовать $ all и $ и операторы, не самые лучшие и должны будут определить размер массива заранее

.find( { "name": "n1", "version": "1.0" , "ids" : { $all: ["XYZ","ABC"] }, "ids": { $size: 2 }})

Я думаю, что это должно работать на 3.2.

...