查询 MongoDB 数据库时有没有办法测试以下字段:
- 还没有设置
- 设置为空
- ...作为奖励,是一个包含 null 作为其值之一的数组吗?
查询 MongoDB 数据库时有没有办法测试以下字段:
这应该涵盖您的所有三种情况:
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
$exists运算符来检查字段是否已设置。
要检查该字段的值是否为null
,您可以直接编写查找查询。
假设集合名称为 coll,字段名称为 field(添加了一个字段“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});
. 更新我的答案以反映这一点。