2012-08-01 3 views
31

これは愚かな質問で、おそらく簡単な答えがあると思います。新しい_idを使ってMongoDBに文書を複製する

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 –

12

コピードキュメントに新しいObjectIdを付けることができます。 Mongoのでは689応答を@に

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

ほとんど改善をシェル

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

を削除:「E11000キーエラーを再現インデックス ' –

+3

私はどのように表示されません。 各インサートは新しいユニコード_idを作成します。 – pykiss

+0

原因 "E11000重複キーエラーインデックス" –

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); 
}) 
関連する問題