Убедитесь, что поле существует с MongoDB


131

Итак, я пытаюсь найти все записи, для которых задано поле и которые не равны нулю.

Я пытаюсь использовать $exists, однако, согласно документации MongoDB, этот запрос вернет поля, которые равны нулю.

$exists соответствует документам, содержащим поле, в котором хранится нулевое значение.

Итак, теперь я предполагаю, что мне придется сделать что-то вроде этого:

db.collection.find({ "fieldToCheck" : { $exists : true, $not : null } })

Однако всякий раз, когда я пытаюсь это сделать, я получаю сообщение об ошибке. [invalid use of $not] Кто-нибудь знает, как это сделать?

Ответы:


184

Использование $ne(для «не равно»)

db.collection.find({ "fieldToCheck": { $exists: true, $ne: null } })

Что это возвращается? Нулевая коллекция? Один предмет? Массив?
Оливер Диксон

4
@iLoveUnicorns: что findвсегда возвращает: набор записей, соответствующих критериям.
Серджио Тюленцев

2
@SergioTulentsev AFAIK он возвращает курсор
fernandohur

@fernandohur: да, но если у вас меньше одной страницы документов, вы даже не заметите разницы. И если бы вы запускали этот запрос из внешнего драйвера, я почти уверен, что большинство из них оградят вас от деталей реализации курсора.
Серджио Тюленцев 03

24

Предположим, у нас есть коллекция, как показано ниже:

{ 
  "_id":"1234"
  "open":"Yes"
  "things":{
             "paper":1234
             "bottle":"Available"
             "bottle_count":40
            } 
}

Мы хотим знать, присутствует ли бутылочное поле или нет?

Ans:

db.products.find({"things.bottle":{"$exists":true}})

2
When <boolean> is true, $exists matches the documents that contain the field, including documents where the field value is null. Из документации.
AlbertEngelB

1
да, но я не понимаю, почему БД может содержать значение null, это неаккуратно
Мартейн Шеффер


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.