2011-04-19 51 views

回答

146

是的,它可能使用$exists

db.things.find({ a : { $exists : false } }); // return if a is missing 

如果是真的,$存在包含字段,包括在字段值爲空文件的文件相匹配。如果爲false,則查詢僅返回不包含該字段的文檔。

+1

被警告,'$ exist'查詢不能使用索引(請參閱http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24exists)。 – Theo 2011-04-19 17:03:30

+4

@Theo:從MongoDB 2.0開始,存在$ exists是可以使用索引的(https://jira.mongodb.org/browse/SERVER-393) – 2011-11-23 15:48:30

+0

我是在這之後爲Mongoid在範圍中使用的。看起來像這樣:''scope:without_recommendation,:where => {:recommendation => {「$ exists」=> false}}''' – genkilabs 2012-06-15 01:15:00

47

如果你不在乎,如果該字段缺少或null(或者,如果它永遠不會null),那麼你可以用略短更安全:

db.things.find({ a : null }); // return if a is missing or null 

它是安全的,因爲$exists將返回true即使該字段爲空,這往往不是預期的結果,並且可能導致NPE。