如何使用go从mongodb获取数据时对数据进行分组?

时间:2014-11-05 10:25:44

标签: mongodb go mgo

我有一个名为“myplace”的集合它有以下文件place_name,city,latitude,longitude。

文档格式

{
      "_id" : ObjectId("544a2147785b707b340ed6c7"),
      "latitude" : 12.36547,
      "longitude" : 1.235689,
      "place_name" : "some_place",
      "city" : "City1"
}
{
      "_id" : ObjectId("544a2147785b707b340ed6c7"),
      "latitude" : 12.36547,
      "longitude" : 1.235689,
      "place_name" : "some_place",
      "city" : "City3"
}
{
      "_id" : ObjectId("544a2147785b707b340ed6c7"),
      "latitude" : 12.36547,
      "longitude" : 1.235689,
      "place_name" : "some_place",
      "city" : "City1"
 }
 {
      "_id" : ObjectId("544a2147785b707b340ed6c7"),
      "latitude" : 12.36547,
      "longitude" : 1.235689,
      "place_name" : "some_place",
      "city" : "City2"
}
{
      "_id" : ObjectId("544a2147785b707b340ed6c7"),
      "latitude" : 12.36547,
      "longitude" : 1.235689,
      "place_name" : "some_place",
      "city" : "City2"
}

如何将数据分组到同一个城市?意思是我需要json结果的数组第一个数组应该包含所有拥有city1第二个数组的数据包含所有拥有city2的数据等等

2 个答案:

答案 0 :(得分:2)

在我看来,你可以更容易地在Mongo中做到这一点。使用聚合框架。

db.yourCollection.aggregate([{$group:{_id: "$city", details:{$push: {latitude:  "$latitude",  longitude: "$longitude", place_name:"$place_name"}}}}])

我认为这应该有效,我现在无法在工作时尝试。希望它有所帮助!

答案 1 :(得分:1)

如果你正在使用mgo,一个简单的排序就可以了。在这里,我们首先按城市搜索,然后按名称搜索:

query1 := collection.Find(nil).Sort("city", "place_name")