测试MongoDB中未设置或丢失的字段

Testing for unset or missing fields in MongoDB

本文关键字:字段 设置 MongoDB 测试      更新时间:2023-09-26

在查询MongoDB数据库时,有没有一种方法可以测试以下字段:

  • 尚未设置
  • 设置为null
  • 。。。作为奖励,数组是否包含null作为其值之一

这应该涵盖所有三种情况:

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

参考文献:

  • 查询和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
  1. $exists运算符,用于检查字段是否已设置。

  2. 要检查字段的值是否为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确实是正确的;您只需要CCD_ 2。更新我的回答以反映这一点。