【问题标题】:Update collection , convert fields to array更新集合,将字段转换为数组
【发布时间】:2014-12-17 14:17:32
【问题描述】:

我是 nosql 世界的新手,我想尝试 mongodb 中的“geonear”(地理空间)功能,我以这种形式导入了一些数据:

{  
   "_id":ObjectId("549164b752c5c30b15bbc26a"),
   "ville":"Auenheim",
   "lat":"48,81",
   "lon":"8,01"
}

我需要以这种形式更新我所有的数据收集:

{

  "_id":ObjectId("549164b752c5c30b15bbc26a"),
   "ville":"Auenheim",
   loc : { type: "Point", coordinates: [ 8.01 , 48.81] }

}

有没有办法从更新查询中用 mongo 做到这一点? 还是我应该使用 php 脚本(集合是巨大的..)

感谢您的帮助, 开心

【问题讨论】:

    标签: json mongodb mongodb-query bson


    【解决方案1】:

    您可以遍历每个文档并使用简单的脚本更改格式。在 mongo shell 中,你会写类似

    db.test.find({}, { "lat" : 1, "lon" : 1 }).forEach(function(doc) {
         db.test.update({ "_id" : doc._id },
                        {
                            "$unset" : { "lat" : 1, "lon" : 1 },
                            "$set" : { "loc" : { "type" : "Point", "coordinates" : [ doc.lon, doc.lat ] } }
                        })
    })
    

    您还需要将latlon 更改为数字。我不确定这是一个错字还是什么,但如果需要,您可以将其作为函数的一部分。为了加快速度,您可以使用大多数驱动程序支持的parallel collection scan 来使用多个线程处理所有文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-30
      • 1970-01-01
      • 2016-05-12
      • 1970-01-01
      • 2021-02-25
      • 2019-08-10
      • 2013-01-15
      相关资源
      最近更新 更多