【问题标题】:How can I group data while fetching from mongodb using go?如何在使用 go 从 mongodb 获取数据时对数据进行分组?
【发布时间】:2014-11-05 10:25:43
【问题描述】:

我有一个名为“myplace”的集合,它有以下文件 place_name、城市、纬度、经度。

文档格式

{
      "_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的数据,依此类推

【问题讨论】:

  • 既然你无论如何都在获取所有数据,那么myplace.Find(nil).Iter() 并在 Go 中进行分组呢?

标签: mongodb go mgo


【解决方案1】:

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

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

我认为这应该可行,但我目前无法在工作时尝试。希望有帮助!

【讨论】:

    【解决方案2】:

    如果您使用的是 mgo,那么简单的排序就可以解决问题。这里我们先按城市再按名称搜索:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-25
      • 2021-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多