4

MongoDBデータベースにクエリを実行して、次のいずれかのフィールドをテストする方法はありますか?

  • まだ設定されていません
  • nullに設定されています
  • ...そしてボーナスとして、値の1つとしてnullを含む配列はありますか?
4

3 に答える 3

4

これは、3 つのケースすべてをカバーする必要があります。

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

参考文献:


Mongo シェルから確認できます。

> 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
于 2012-08-30T06:36:03.283 に答える
3

コレクション名にcoll、フィールド名にフィールドを想定します(区別するためにフィールド「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});。それも反映するように私の答えを更新します。

于 2012-08-30T06:33:33.850 に答える
3
  1. $exists演算子を使用して、フィールドが設定されているかどうかを確認します。

  2. フィールドの値が であるかどうかを確認するにはnull、検索クエリを直接記述できます。

于 2012-08-30T06:11:43.407 に答える