MongoDB 并聚合嵌入文档
MongoDB and aggragate the embeded document
我是 mongoDB 的新手,我遇到了一个问题。数据是根据官方文档导入的。
如您所见,每个餐厅都有一个等级数组,嵌套文档包含一个分数字段。我想做的是根据每个餐厅等级的平均分,检索平均分最高的餐厅。这可能需要使用mongoDB的聚合方法,但是文档没有涵盖嵌套文档的情况,我搜索了但没有结果。本站有similar question,但不是很清楚
[
{ "_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" },
...
]
使用 mongo shell,尝试以下操作,将 "collecttionname" 更改为您的餐厅系列名称
db.collectionname.aggregate( { '$unwind' : '$grades' } , { '$group' : { '_id' : '$_id' , 'average' : { $avg : '$grades.score' } } } , { '$sort' : { 'average' : -1 } } , { '$limit' : 1 } )
我是 mongoDB 的新手,我遇到了一个问题。数据是根据官方文档导入的。
如您所见,每个餐厅都有一个等级数组,嵌套文档包含一个分数字段。我想做的是根据每个餐厅等级的平均分,检索平均分最高的餐厅。这可能需要使用mongoDB的聚合方法,但是文档没有涵盖嵌套文档的情况,我搜索了但没有结果。本站有similar question,但不是很清楚
[
{ "_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" },
...
]
使用 mongo shell,尝试以下操作,将 "collecttionname" 更改为您的餐厅系列名称
db.collectionname.aggregate( { '$unwind' : '$grades' } , { '$group' : { '_id' : '$_id' , 'average' : { $avg : '$grades.score' } } } , { '$sort' : { 'average' : -1 } } , { '$limit' : 1 } )