如何批量更新我的mongo数据以添加固定级别?

时间:2012-07-05 17:05:58

标签: java mongodb migration

我最近在名为 content 的类型化JSONObject字段中将POJO从所有类型属性更改为空闲内容。

问题是所有旧文档都映射到旧的POJO版本,所以它们存储如下:

{"_id":"ObjectId(value)","field1":"value1","field2":"value2"}

我是否可以通过单个mongo命令更新所有字段,以便我可以包装除id之外的所有内容,因此结果将是这样的:

{"_id":"ObjectId(value)","content":{"field1":"value1","field2":"value2"}}

或者我应该编写一个逐个执行的简单程序? (如在迭代所有值时,手动添加新的内容级别)

2 个答案:

答案 0 :(得分:1)

不幸的是,没有MongoDB命令允许您以这种方式重构文档。您需要编写一个程序来逐个获取所有文档,更新结构,然后将更新的结构发送回MongoDB。

通常,最好的方法是将修改后的文档写入新集合,然后在完成后删除旧集合。

答案 1 :(得分:1)

我解决了它创建一个.js文件,通过mongo shell执行。

mongo myDb fixresults.js

该文件如下:

for( var c = db.results.find(); c.hasNext(); ) {
    var full = c.next();
    var anon = db.results.findOne({"_id":full._id},{"_id":0});
    var n = {"_id":full._id,"content":anon};
    db.results.temp.insert(n);
}

这会将转换后的值插入到.temp集合中,稍后可以重命名以替换原始集合。