如何使用Mongo / Mongoid执行此伪GROUP BY查询

时间:2012-09-05 21:28:27

标签: mongodb mongoid

我的MongoDB数据库中有很多集合。为了说明我想弄清楚的内容,这里有一个名为“Restaurant”的示例文档:

{ name: "Foo"
  categories: [Pizza, Food]
  visits: 10
  location: "San Francisco"
}

我需要能够查询按照类别中的第一个类别分组的位于旧金山的位置的十大受访餐馆。假设所有集合都具有相同的文档格式,那么目前该如何完成?

1 个答案:

答案 0 :(得分:2)

首先,您要查询位于“旧金山”的所有文档:

db.foo.find( {location: "San Francisco" } )

其次,要查找访问量最大的餐馆,您需要根据餐馆的访问次数对结果进行排序。您将通过访问以反向数字顺序想要此列表,因此我们使用visit:-1:

db.foo.find( {location: "San Francisco"} ).sort( {visits: -1} )

要获得前10家餐厅,我们会将此结果限制为10个结果:

db.foo.find( {location: "San Francisco"} ).sort( {visits: -1} ).limit(10)

最后,为了按类别“分组”结果,我们可以先按照访问次数对结果进行排序,然后按顺序按类别对结果进行排序:

db.foo.find( {location: "San Francisco"} ).sort( {visits: -1, categories: 1} ).limit(10)