6

ドキュメントの配列に値を含まないドキュメントを選択しようとしています。

私は 2 つの問題を抱えています。個別に提示します。

(1) 配列内の値のクエリで $not 演算子を使用できません。たとえば、コレクションに次のドキュメントがあるとします。

{ _id: ObjectId("000000000000000000000000"), mylist: [ "red", "green", "blue" ] }

次を使用してこのドキュメントを選択できます。

db.myCol.find({mylist:"red"})

ただし、オレンジがないことをテストして、このドキュメントを選択したいと思います。

db.myCol.find({$not:{mylist:"orange"}})

これが機能しないのはなぜですか?

(2) 配列値が ObjectIds の場合、配列クエリで値を取得できません。

{ _id: Object("000000000000000000000000"), mylist: [ ObjectId("111111111111111111111111") ] }

以下はこのドキュメントを取得しません:

myCol.find({mylist:ObjectId("111111111111111111111111")})

誰かが私が間違っているかもしれないことを提案できますか?

4

3 に答える 3

6

あなたのような単純なケースには、次の$notように機能するものはありません。$ne

db.myCol.find({ mylist: { $ne: 'orange' } })

あなたの2番目は私にとってはうまくいくはずです(そしてうまくいきます)。おそらくあなたは間違った数のものを使用しています。

于 2012-04-17T06:33:18.850 に答える
3

別の方法として、次のように$notを使用することもできます。

{ 
    "mylist" : {
        $not : { 
            $in : ["red"] 
        } 
    }
}
于 2013-01-23T11:06:12.860 に答える