Подтвердить что ты не робот

Выберите документы MongoDB, где поле не существует, равно null или false?

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

{ "_id": 1, name: "Apple" }
{ "_id": 2, name: "Banana", "is_reported": null }
{ "_id": 3, name: "Cherry", "is_reported": false }
{ "_id": 4, name: "Kiwi",   "is_reported": true }

Есть ли более простой запрос для выбора всех документов, где "is_reported" находится в состоянии фальсификации; то есть либо несуществующий, ни один, ни ложный? То есть, запрос, который выбирает Apple, Banana и Cherry, но не Kiwi?

В соответствии с часто задаваемыми вопросами MongoDB { "is_reported": null } будет выбирать документы, в которых "is_reported" является либо нулевым, либо несуществующим, но он по-прежнему не выбирает документы, где "is_reported" false.

Сейчас у меня есть следующий запрос, который отлично работает, но он просто не выглядит очень изящным. Если есть несколько полей, которые мне нужно выбрать, они становятся беспорядочными очень быстро. Есть ли лучший запрос, который достигает того же конечного результата?

db.fruits.find({ $or: [ { "is_reported": null }, { "is_reported": false } ] })
4b9b3361

Ответ 1

Вы можете сделать это с помощью $in:

 
db.fruits.find({is_reported: {$in: [null, false]}})

возвращает:

{
  "_id": 1,
  "name": "Apple"
}
{
  "_id": 2,
  "name": "Banana",
  "is_reported": null
}
{
  "_id": 3,
  "name": "Cherry",
  "is_reported": false
}

Вы также можете логически перевернуть логику и использовать $ne, если у вас нет каких-либо значений помимо true, чтобы исключить:

db.fruits.find({is_reported: {$ne: true}})