更新集合,将字段转换为数组

时间:2014-12-17 14:17:33

标签: json mongodb mongodb-query bson

我在nosql世界中相当新,我想尝试一下" geonear" mongodb中的(地理空间)功能,我以这种形式导入了一些数据:

{  
   "_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脚本(集合是巨大的..)

谢谢你的帮助, 快乐

1 个答案:

答案 0 :(得分:0)

您可以遍历每个文档并使用简单的脚本更改格式。在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,以使用多个线程处理所有文档。