【发布时间】:2015-10-09 19:08:49
【问题描述】:
作为 mongodb 世界的新手,当我尝试在集合中复制 mongo 文档时遇到了麻烦。 要复制,我的意思是我想将旧文档复制到具有新 _id 字段的新文档中,并更改几个字段的值。
mongodb java驱动是我的操作上下文。
有人已经这样做了吗?
【问题讨论】:
-
您想通过添加一些新字段或更改现有字段的值来更新集合中的现有文档吗?
作为 mongodb 世界的新手,当我尝试在集合中复制 mongo 文档时遇到了麻烦。 要复制,我的意思是我想将旧文档复制到具有新 _id 字段的新文档中,并更改几个字段的值。
mongodb java驱动是我的操作上下文。
有人已经这样做了吗?
【问题讨论】:
您可以将检索到的文档的 _id 设置为新的 ObjectId() 并保存。外壳中的示例:
> db.sample.insert({"docName":"Old Document"});
WriteResult({ "nInserted" : 1 })
> var doc = db.sample.findOne( {"docName":"Old Document"} );
> doc
{ "_id" : ObjectId("55ad11ea8306f3e7da87d62d"), "docName" : "Old Document" }
> doc._id = new ObjectId();
ObjectId("55ad122c8306f3e7da87d62e")
> db.sample.insert(doc);
WriteResult({ "nInserted" : 1 })
> db.sample.find().pretty();
{ "_id" : ObjectId("55ad11ea8306f3e7da87d62d"), "docName" : "Old Document" }
{ "_id" : ObjectId("55ad122c8306f3e7da87d62e"), "docName" : "Old Document" }
【讨论】:
我只是做了我所谓的文件副本:
只需将要复制/克隆的文档或其他内容加载到光标中即可
while (thecursor.hasNext()) {
Document doc = thecursor.next();
doc.put(Constants.ID, ObjectId.get().toString());
collection.insertOne(doc);
}
它看起来工作!
【讨论】: