Відповіді:
Так, можливо, використовуючи $ postoji :
db.things.find( { a : { $exists : false } } ); // return if a is missing
Коли вірно, $ існує, що відповідає документам, що містять поле, включаючи документи, у яких значення поля є нульовим. Якщо помилково, запит повертає лише документи, які не містять поля.
scope :without_recommendation, :where => {:recommendation => {"$exists"=>false}}
Якщо вам не байдуже, чи поле відсутнє або null
(або воно ніколи null
), ви можете використовувати трохи коротший та безпечніший:
db.things.find( { a : null } ); // return if a is missing or null
Це безпечніше, тому що $exists
повернеться, true
навіть якщо поле є нульовим, що часто не є бажаним результатом і може призвести до NPE.
null
і не пропускати. Це насправді несподівана поведінка, тому що ви б не змогли зробити те ж саме для 0
(що також є false
), тому тут null
є свого роду виняток. Тому найкраща практика - це більш читабельна відповідь, використання $exists: false
якої неоднозначно. Пам’ятайте, ваш трохи коротший варіант насправді не коротший, якщо вам потрібно мати за цим коментарем!
a
, або тому, що a
є, null
або тому, що a
він відсутній, тоді $exists
це недостатньо добре, тому що він не вловлює випадки, коли a
є null
.
$exist
запити не можуть використовувати індекси (див. Mongodb.org/display/DOCS/… ).