Die Abfrage geht alsBitte erläutern Sie diese mongodb Abfrage und das Ergebnis
db.restaurants.find({$and : [{"grades.score" : {$gt:80}},{"grades.score" : {$lt:100}}]})
folgt es mit der Idee im Kopf des Abrufens Restaurants mit einer Punktzahl von 80 bis 100
geschrieben wurde, warum hat diese Abfrage Rückkehr das folgende Dokument in seinem Ergebnis. Das unten stehende Dokument enthält kein Notenelement im Unterdokument der Noten, das in den Bereich von "größer als 80 UND kleiner als 100" fällt.
Ich habe versucht, diese
{
"_id" : ObjectId("572eb5df1d739cc73c21fab1"),
"address" : {
"building" : "65",
"coord" : [
-73.9782725,
40.7624022
],
"street" : "West 54 Street",
"zipcode" : "10019"
},
"borough" : "Manhattan",
"cuisine" : "American ",
"grades" : [
{
"date" : ISODate("2014-08-22T00:00:00Z"),
"grade" : "A",
"score" : 11
},
{
"date" : ISODate("2014-03-28T00:00:00Z"),
"grade" : "C",
"score" : 131
},
{
"date" : ISODate("2013-09-25T00:00:00Z"),
"grade" : "A",
"score" : 11
},
{
"date" : ISODate("2013-04-08T00:00:00Z"),
"grade" : "B",
"score" : 25
},
{
"date" : ISODate("2012-10-15T00:00:00Z"),
"grade" : "A",
"score" : 11
},
{
"date" : ISODate("2011-10-19T00:00:00Z"),
"grade" : "A",
"score" : 13
}
],
"name" : "Murals On 54/Randolphs'S",
"restaurant_id" : "40372466"
}
zurück, also gibt es keine Möglichkeit, dies mit einem einfachen $ und? weil ich dachte, dass es Dokumente zurückgeben sollte, die beide der $ und – Newton
zufrieden stellten, da ich bereits erwähnt habe, dass Sie mit einem Array umgehen. Sie sollten Mongo also anweisen, alle Elemente des Arrays zu durchlaufen und zu überprüfen, ob eines der Elemente die Bedingung erfüllt. Dies geschieht durch den Operator '$ elemMatch'. Ich habe meine Antwort mit einer Erklärung bearbeitet. Hoffe, es hilft –
oh, ich dachte, wenn ich ein $ und es würde zu 2 Bedingungen in 1. kombinieren, sondern stattdessen prüft es für die Gültigkeit von beiden. Mit elemMatch bekommt man die richtige Antwort. Kannst du eine schnelle Antwort geben? Kann dies mit "grades.score" erreicht werden? – Newton