2012-08-30 51 views
4

未設置或丟失的領域是否有查詢MongoDB數據庫時測試,要麼字段的方式:測試對於MongoDB中

  • 有尚未設置
  • 設置爲NULL
  • 。 ..作爲獎勵,是一個包含null作爲其值之一的數組?

回答

4

這應涵蓋所有你的三個情況:

db.FOO.find({BAR: null}); 

參考文獻:


你Ç來自Mongo shell的驗證:

> db.foo.drop(); 
true 
> db.foo.insert({_id:1, bar:1,   matches:'NO'}); 
> db.foo.insert({_id:2,     matches:'YES'}); 
> db.foo.insert({_id:3, bar:null,  matches:'YES'}); 
> db.foo.insert({_id:4, bar:[1,2,3], matches:'NO'}); 
> db.foo.insert({_id:5, bar:[1,2,null], matches:'YES'}); 
> 
> db.foo.find({bar: null}); 
{ "_id" : 2, "matches" : "YES" } 
{ "_id" : 3, "bar" : null, "matches" : "YES" } 
{ "_id" : 5, "bar" : [ 1, 2, null ], "matches" : "YES" } 
> db.foo.count({bar: null}); 
3 
> db.foo.count({matches: 'YES'}); 
3 
+0

很好的答案,謝謝! –

3
  1. $exists運營商來檢查現場已設置與否。

  2. 要檢查該字段的值是否爲null,可以直接編寫查找查詢。

3

假設科爾收集名稱和字段的字段名(添加字段, 「n」 來區分):

> db.coll.insert({n:1, field:1});   // should NOT find 
> db.coll.insert({n:2});     // should find 
> db.coll.insert({n:3, field:null});  // should find 
> db.coll.insert({n:4, field:[1,2,3]}); // should NOT find 
> db.coll.insert({n:5, field:[1,2,null]}); // should find 
> db.coll.find({field:null}); 
{ "_id" : ObjectId("503f089a1edeba307d051fbd"), "n" : 2 } 
{ "_id" : ObjectId("503f089e1edeba307d051fbe"), "n" : 3, "field" : null } 
{ "_id" : ObjectId("503f08b01edeba307d051fc0"), "n" : 5, "field" : [ 1, 2, null ] } 

更新:Leftium確實是正確的;你只需要db.coll.find({field:null});。更新我的答案以反映這一點。