Ben MongoDB için yeni ve bunun üzerine bazı egzersizleri yapıyorum n'inci Belgesi üzerindeki Maç için. Belge "Restaurant" için aşağıdaki yapı göz önüne alındığındaSorgu bir Array
:
{
"_id" : ObjectId("5704adbc2eb7ebe23f582818"),
"address" : {
"building" : "1007",
"coord" : [
-73.856077,
40.848447
],
"street" : "Morris Park Ave",
"zipcode" : "10462"
},
"borough" : "Bronx",
"cuisine" : "Bakery",
"grades" : [
{
"date" : ISODate("2014-03-03T00:00:00Z"),
"grade" : "A",
"score" : 2
},
{
"date" : ISODate("2013-09-11T00:00:00Z"),
"grade" : "A",
"score" : 6
},
{
"date" : ISODate("2013-01-24T00:00:00Z"),
"grade" : "A",
"score" : 10
},
{
"date" : ISODate("2011-11-23T00:00:00Z"),
"grade" : "A",
"score" : 9
},
{
"date" : ISODate("2011-03-10T00:00:00Z"),
"grade" : "B",
"score" : 14
}
],
"name" : "Morris Park Bake Shop",
"restaurant_id" : "30075445"
}
ben bu sorguyu yazdım.restoran Kimliği, isim bulmak için bir MongoDB sorgusu yazın Özellikle ben hangi burada soru rapor, this exercise üzerinde saplanıp ve 2. dereceden oluşan dizinin bir "A" derecesi ve bir ISODate "2014-08-11T00: 00: 00Z" de 9 puanını aldığı restoranlar için notlar.
db.restaurants.find( { 'grades.1': { 'score': 'A', 'grade': 9, 'date' : ISODate("2014-08-11T00:00:00Z") } }, { restaurant_id: 1, name: 1, grades: 1 });
çalışmıyor:
db.restaurants.find(
{ "grades.1.date": ISODate("2014-08-11T00:00:00Z"),
"grades.1.grade":"A" ,
"grades.1.score" : 9
},
{"restaurant_id" : 1,"name":1,"grades":1}
);
Benim sorulara
şunlardır:grades.1
bölümünü tekrarlamak kaçınarak sorguyu yazmak için bir yol yoktur sağlanan çözüm şudur?- neden yanlış benim sorgu,
grades.1
bir belge nesne olduğunu verilir? Benim soruya cevap yardımcı olabilir
, ben MongoDB shell version: 3.2.4
DÜZENLEMEYİ kullanıyorum:
Ben this question 2 sayesinde sorgulamaya cevabını buldum.
Özellikle ben sipariş önemli olduğunu keşfetti. Aşağıdaki sorguyu gerçekleştirirseniz Nitekim, ben geçerli bir sonuç almak: Bu sorgu çalışırdb.restaurants.find({'grades.1': {'date': ISODate("2014-08-11T00:00:00Z"), 'grade':'A', score:9}}, {restaurant_id:1, name:1, grades:1})
Not sadece çünkü tüm alt belge yönettiği "alanlar" belirtilir ve bunlar aynı sırayla belirtilmiştir.
Geçerli bir belge değil çünkü alan adları '$' – styvane
ile başlayamıyor Bu doğru bir yanlış yapı sağladı. Bunu gerçek bir – user2340612
ile düzelttim Sorgulama kriterlerinizde de göründüğünden, geçerli bir 'date' kullanmalısınız. – styvane