2017-03-22 3 views
0

私は、次のドキュメントがあります:私はgrades.gradegrades.scoreを見て、gradesオブジェクトがgrade == "A"score == 2を持っている場合は、この文書を返さないクエリをしたい指定されたエントリを持たないMongoDBクエリドキュメント?

{ 
    "address": { 
    "building": "1007", 
    "coord": [ -73.856077, 40.848447 ], 
    "street": "Morris Park Ave", 
    "zipcode": "10462" 
    }, 
    "borough": "Bronx", 
    "cuisine": "Bakery", 
    "grades": [ 
    { "date": { "$date": 1393804800000 }, "grade": "A", "score": 2 }, 
    { "date": { "$date": 1378857600000 }, "grade": "A", "score": 6 }, 
    { "date": { "$date": 1358985600000 }, "grade": "A", "score": 10 }, 
    { "date": { "$date": 1322006400000 }, "grade": "A", "score": 9 }, 
    { "date": { "$date": 1299715200000 }, "grade": "B", "score": 14 } 
    ], 
    "name": "Morris Park Bake Shop", 
    "restaurant_id": "30075445" 
} 

を。しかし、たとえば、あるオブジェクトがgrade == "A"で、もう一つのオブジェクトがgradesのオブジェクトがscore == 2の場合、ドキュメントを返すようにします。 (それは動作しませんが)

また、これは私が何をしようとしている説明があります

db.restaurants.find({ 
    grades : { 
     $and: [ 
      {"grade": {'$ne':"A"}}, 
      {"score": {'$ne':2}} 
     ] 
    } 
}); 

答えて

1

あなたは、クエリの下に試すことができます。

$and$or$nandを基本的に必要とします。 MongoDBには$nand演算子がないので、それを同等のexperessionに置き換えました。

db.restaurants.find({ 
    $and: [{ 
     $or: [{ 
      "grades.grade": "A" 
     }, { 
      "grades.score": 2 
     }] 
    }, { 
     $nor: [{ 
      $and: [{ 
       "grades.grade": "A" 
      }, { 
       "grades.score": 2 
      }] 
     }] 
    }] 
}); 

$or操作がグレード埋め込まれた文書のいずれかがグレードAやスコアのいずれかが2でいるすべてのドキュメントが一致します。

{ "grade": "A", "score": 3 } --- Just grade A 

{ "grade": "A", "score": 2 } --- Both grade A and score 2 

{ "grade": "B", "score": 2 } --- Just score 2 

$nand操作は全てグレード埋め込み文書のいずれもA両方として等級を有していないドキュメントとスコアにマッチする上記の動作の2

{ "grade": "A", "score": 3 } --- Just grade A 

{ "grade": "B", "score": 2 } --- Just score 2 

{ "grade": "C", "score": 4 } --- None 
$and

が交差点です。

+0

これはうまくいくように見えますが、私はその周りに頭を巻きつけるのに苦労しています。それを私に説明してもらえますか? –

+0

申し訳ありません。ありがとうございます – Veeram

+0

ありがとう!それを理解するためにもう一度私を取った。それはすごいもので、本当に役に立ちます。本当にありがとう! –

関連する問題