使用新的_id在MongoDB中复制文档

Jos*_*uiz 46 mongodb

好吧,我想这是一个愚蠢的问题,可能有一个简单的答案.

如何在MongoDB中复制文档,更改新文档的_id?

您拥有原始文档的成像:

> var orig = db.MyCollection.findOne({_id: 'hi'})
Run Code Online (Sandbox Code Playgroud)

现在我想在集合中使用_id'bye'的另一个文档.

Ser*_*sev 96

只需更改ID并重新插入即可.

> db.coll.insert({_id: 'hi', val: 1})
> var orig = db.coll.findOne({_id: 'hi'})
> orig._id = 'bye'
bye
> db.coll.insert(orig)
> db.coll.find()
{ "_id" : "hi", "val" : 1 }
{ "_id" : "bye", "val" : 1 }
Run Code Online (Sandbox Code Playgroud)

  • 如果要克隆该行,但没有明确地键入新的id,只需在执行insert命令之前删除"_id"属性:delete orig._id (7认同)

689*_*689 23

您可以为复制文档提供新的ObjectId.在mongo shell中

var copy = db.collection.findOne();
for (var i = 0; i< 30; i++){ 
    copy._id = new ObjectId(); 
    db.collection.insert(copy);
}
Run Code Online (Sandbox Code Playgroud)


pyk*_*iss 22

@ 689响应略有改进

var copy = db.collection.findOne({},{_id:0});
for (var i = 0; i< 30; i++){ 
    db.collection.insert(copy);
}
Run Code Online (Sandbox Code Playgroud)

  • 使用`{_id:0}`,不需要`delete copy._id`,因为没有提取_id (7认同)
  • 我不知道怎么样.每个插入都会创建一个新的unic _id. (4认同)
  • 这可能会导致:'E11000重复键错误索引' (3认同)
  • 添加`删除副本._id` (2认同)

Irs*_*han 7

您可以使用以下代码:

使用单行运行:

db.collectionName.find({"_id" : ObjectId("5a4e47e0a21698d455000009")}).forEach(function(doc){var newDoc = doc; delete newDoc._id; db.collectionName.insert(newDoc); })
Run Code Online (Sandbox Code Playgroud)

用于理解的结构形式:

db.collectionName.find({"_id" : ObjectId("5a4e47e0a21698d455000009")}).forEach(function(doc){
    var newDoc = doc;
    delete newDoc._id;
    db.collectionName.insert(newDoc);
})
Run Code Online (Sandbox Code Playgroud)