Перевірте, чи існує поле з 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: Так, але якщо у вас менше однієї сторінки документів, ви навіть не побачите різниці. І якщо ви запускали цей запит із зовнішнього драйвера, я впевнений, що більшість із них захищає вас від деталей реалізації курсору.
Серхіо Туленцев

24

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

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

Ми хочемо знати, чи є у пляшці поле чи ні?

Відповідь:

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, це неохайно
Martijn Scheffer

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.