0

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

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

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

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

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

?

或者我应该编写一个简单的程序来一个一个地完成它?(就像在迭代所有值时手动添加新的内容级别一样)

4

2 回答 2

1

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

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

于 2012-07-05T17:51:21.130 回答
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 集合中,您可以稍后将其重命名以替换原始值。

于 2012-07-05T18:53:59.683 回答