2017-11-16 3 views
0

im neueren gruppiert auf mongobd, und ich habe 2 Anfragen: frist:Unterschied zwischen Abfragen mit

db.movies.aggregate([ 
    { "$match": { 
     $and : [ 
     { "imdb.rating": { $lt: 7 }}, 
     {$and: [ {"genres": { "$ne": "Crime" } }, {"genres": { "$ne": "Horror" } }]}, 
     {$and: [ {"languages": { "$eq": "English" } }, {"languages": { "$eq": "Japanese" } }]}, 
     {$or: [ {"rated": { "$eq": "PG" } }, {"rated": { "$eq": "G" } }]} 

     ] 

       } 
    } 
]).itcount() 

Das Ergebnis seiner: 23

Und jetzt mit diesem:

db.movies.aggregate([ 
    { "$match": { 
     "imdb.rating": { $lt: 7 }, 
     $and: [ {"genres": { "$ne": "Crime" } }, {"genres": { "$ne": "Horror" } }], 
     $or: [ {"rated": { "$eq": "PG" } }, {"rated": { "$eq": "G" } }], 
     $and: [ {"languages": { "$eq": "English" } }, {"languages": { "$eq": "Japanese" } }] 

       } 
    } 
]).itcount() 

Das Ergebnis ist 25,

Aber jetzt kann ich nicht verstehen, was der Unterschied zwischen zwei Abfragen ist, kann Hilfe dabei?

Antwort

1

Es gibt keinen funktionalen Unterschied. $match verwendet implizit $and, wenn Sie mehr als einen Ausdruck und einen einfachen Schlüssel angeben: Wertausdruck ist eine Abkürzung für key: {$eq: value}, z.

$match: {a:3, b:"buzz"} 

ist eine Abkürzung für:

$match: {$and: [{a:{$eq:3}}, {b:{$eq:"buzz"}} ] } 
+0

und warum die Ergebnisse es nicht gleich? –

+0

Whoa; habe ich falsch gelesen? Ich dachte, dass die zweite Version ALSO 23 zurückgeben würde, und Sie wollten nur eine Anleitung für Kurzschrift. OK. Könnten Sie 1 oder 2 Beispieldokumente aus der Filmsammlung veröffentlichen? Unter anderem können die $ und für Sprachen $ eq Englisch und Japanisch niemals wahr sein. –

Verwandte Themen