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

131

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

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

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

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

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

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

AlbertEngelB
источник

Ответы:

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, это неаккуратно
Мартейн Шеффер
3

я считаю, что это работает для меня

db.getCollection('collectionName').findOne({"fieldName" : {$ne: null}})
Якирская усадьба
источник
0
db.<COLLECTION NAME>.find({ "<FIELD NAME>": { $exists: true, $ne: null } })
Хардик Гаджар
источник