2016-02-01 3 views
1

Я новичок в mongoDB, и я столкнулся с проблемой. Данные были импортированы в соответствии с официальным документом.
Как вы можете видеть, каждый из ресторанов имеет массив оценок, а вложенный документ содержит поле оценки. То, что я хочу сделать, зависит от среднего балла каждого класса ресторана и выкупа ресторана, который имеет верхний средний балл. Для этого может потребоваться использовать агрегированный метод mongoDB, но документ не охватывает ситуацию с вложенными документами, и я googled, но без результата. На этом сайте есть similar question, но это не так понятно.MongoDB и aggragate встроенный документ

[ 
{ "_id" : ObjectId("56a9f39cae1902590811dffc"), 
"address" : { "building" : "284", 
       "coord" : [ -73.9829239, 40.6580753 ], 
       "street" : "Prospect Park West", 
       "zipcode" : "11215" }, 
"borough" : "Brooklyn", 
"cuisine" : "American ", 
"grades" : [ { "date" : ISODate("2014-11-19T00:00:00Z"), "grade" : "A", "score" : 11 }, 
       { "date" : ISODate("2013-11-14T00:00:00Z"), "grade" : "A", "score" : 2 }, 
       { "date" : ISODate("2012-12-05T00:00:00Z"), "grade" : "A", "score" : 13 }, 
       { "date" : ISODate("2012-05-17T00:00:00Z"), "grade" : "A", "score" : 11 } ], 
"name" : "The Movable Feast", 
"restaurant_id" : "40361606" }, 
     ... 
] 

ответ

1

Использование Монго оболочки, попробуйте ниже, изменение «collecttionname» на имя вашей вашей коллекции ресторана

db.collectionname.aggregate({ '$unwind' : '$grades' } , { '$group' : { '_id' : '$_id' , 'average' : { $avg : '$grades.score' } } } , { '$sort' : { 'average' : -1 } } , { '$limit' : 1 }) 
+0

большое спасибо, это работает. Кажется, что я не понял использование $ unwind. –

+0

Посетите документальную страницу .. https://docs.mongodb.org/manual/reference/operator/aggregation/unwind/, чтобы увидеть, что делает – dansasu11

Смежные вопросы