Запрос для документов, где размер массива больше 1 - PullRequest
575 голосов
/ 18 октября 2011

У меня есть коллекция MongoDB с документами в следующем формате:

{
  "_id" : ObjectId("4e8ae86d08101908e1000001"),
  "name" : ["Name"],
  "zipcode" : ["2223"]
}
{
  "_id" : ObjectId("4e8ae86d08101908e1000002"),
  "name" : ["Another ", "Name"],
  "zipcode" : ["2224"]
}

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

db.accommodations.find({ name : { $size : 2 }})

Это правильно возвращает документыс 2 элементами в массиве name.Однако я не могу выполнить команду $gt, чтобы вернуть все документы, у которых поле name имеет размер массива больше 2:

db.accommodations.find({ name : { $size: { $gt : 1 } }})

Как выбрать все документы с помощью name массив размером больше единицы (желательно без необходимости изменения текущей структуры данных)?

Ответы [ 12 ]

0 голосов
/ 15 июля 2019

Ваш код:

db.accommodations.find({ name : { $size: { $gt : 1 } }})

Не работает, потому что это означает: найти имя, размер которого больше единицы

Вместо этого вы должны были написать:

db.accommodations.find({ name : { $gt: { $size : 1 } }})

Что означает: найти имя, размер которого больше единицы

0 голосов
/ 10 июля 2017

Хотя вышеприведенные ответы все работают, то, что вы изначально пытались сделать, было правильным способом, однако у вас просто есть синтаксис в обратном направлении (переключите «$ size» и «$ gt») ..

Правильно:

db.collection.find({items: {$gt: {$size: 1}}})

Неправильно:

db.collection.find({items: {$size: {$gt: 1}}})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...