【问题标题】:Updating MongoDB document for geospatial searching更新 MongoDB 文档以进行地理空间搜索
【发布时间】:2012-09-06 01:49:25
【问题描述】:

目前,我在 MongoDB 数据库中的单独字段中有我的纬度/经度,但如果我想进行地理空间搜索,我需要采用这种格式:

{ location : [ 50 , 30 ] } 

我可以通过什么方式将我的 lat/long 键的值转换为上述每个文档的新键?

TIA!

【问题讨论】:

  • 读出旧文档,翻转数值,写入结果。不要忘记您更新了哪些内容。我错过了什么吗?
  • 是的,没错。只是想知道怎么做。这篇文章似乎涵盖了它:stackoverflow.com/questions/3788256/…

标签: mongodb geospatial


【解决方案1】:

您必须遍历所有没有 location 字段的文档并添加它(大概删除纬度/经度字段,除非这会破坏您的应用程序)。

db.mycollection.find( { location : { $exists : false } } ).forEach(
    function (doc) {
        // Add (lon, lat) pairs .. order is important
        doc.location = { lon: doc.lon, lat: doc.lat };

        // Remove old properties
        delete doc.lon;
        delete doc.lat;

        // Save the updated document
        db.mycollection.save(doc);
    }
)

请注意,MongoDB geospatial indexing 的顺序在您的文档中应与(经度、纬度)一致。

【讨论】:

  • 当然是移调...你怎么称呼它??我想改变数据的形状而不是实际值(即转换)。我知道如何找到文档,但我不确定迭代的机制……是 map reduce 函数还是什么?
  • @occasl:你是对的,转置是一个合适的术语..我推断出别的东西。将副本映射/减少到新的输出集合中,因此如果您想在适当的位置进行迭代,则 forEach 是合适的。修改了示例以包含更新。
  • 谢谢...这就是我最终所做的。
猜你喜欢
  • 2014-07-10
  • 2018-06-29
  • 1970-01-01
  • 2013-02-23
  • 1970-01-01
  • 2012-07-20
  • 2016-02-12
  • 2013-05-05
  • 1970-01-01
相关资源
最近更新 更多