Відповіді:
Так, можливо, використовуючи $ 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/… ).