4

次のような mongodb コレクションの 1 つを照会しようとしています。

> db.collection.find()
{name: "foo", things: [{stuff:"banana", value: 1}, {stuff:"apple", value: 2}, {stuff:"strawberry", value: 3}]}
{name: "bar", things: [{stuff:"banana", value: 4}, {stuff:"pear", value: 5}]}
...

私の目標は、要素を含むが要素を含まないthingsフィールドを持つすべてのオブジェクトをリストすることですstuff=bananastuff=apple

私はこのようなことを試しました:

db.transactions.find({
  "things": {
    $elemMatch: {
      "stuff": "banana", 
      $ne: {
        "stuff": "apple"
      }
    }
  }
)

しかし、それは機能していません。何か案は?

4

3 に答える 3

7

以下のクエリは、要素を含むが要素を含まないthingsフィールドを持つすべてのドキュメントのリストを取得します。stuff=bananastuff=apple

db.test.find({"$and":[{"things.stuff":"banana"}, {"things.stuff":{$ne:"apple"}}]})
于 2014-03-25T10:56:31.887 に答える
2

$notand$and演算子を使用します。

db.collection.find({

   $and:[
    {"things": {$elemMatch: {  "stuff": "banana"  }}},
    {"things": {$not: {$elemMatch: { "stuff": "apple"}}}}
  ]

});
于 2014-03-25T08:59:27.547 に答える