2012-08-01 36 views
31

在MongoDB中複製一個文檔好吧,我想這是一個愚蠢的問題,可能有一個簡單的答案。使用一個新的_id

如何在MongoDB中複製文檔,更改新文檔的_id?

成像,你有原始文件:

> var orig = db.MyCollection.findOne({_id: 'hi'}) 

,現在我想用_id「再見」集合中的另一個文檔。

回答

83

只需更改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 } 
+3

如果要克隆行,但沒有明確地輸入一個新的ID,只是在做插入命令之前刪除「_id」屬性:刪除orig._id – 2017-02-17 11:41:39

12

您可以給複製文檔一個新的ObjectId。在蒙戈外殼

var copy = db.collection.findOne(); 
for (var i = 0; i< 30; i++){ 
    copy._id = new ObjectId(); 
    db.collection.insert(copy); 
} 
14

有點起色的@ 689響應

var copy = db.collection.findOne({},{_id:0}); 
for (var i = 0; i< 30; i++){ 
    db.collection.insert(copy); 
} 
+3

這可能會導致:「E11000重複鍵錯誤索引' – 2015-06-27 00:36:52

+3

我不明白。 每個插入創建一個新的和唯一的_id。 – pykiss 2015-06-29 09:01:43

+0

導致「E11000重複鍵錯誤索引」 – 2016-06-13 04:52:08

0

您可以使用下面的代碼:使用單線

運行:

db.support_data_cache.find({"_id" : ObjectId("5a4e47e0a21698d455000009")}).forEach(function(doc){var newDoc = doc; delete newDoc._id; db.support_data_cache.insert(newDoc); }) 

理解的結構格式:

db.collectionName.find({"_id" : ObjectId("5a4e47e0a21698d455000009")}).forEach(function(doc){ 
    var newDoc = doc; 
    delete newDoc._id; 
    db.collectionName.insert(newDoc); 
}) 
相關問題