2012-08-01 14 views
31

का उपयोग करके मोंगोडीबी में एक दस्तावेज़ डुप्लिकेट करें ठीक है, मुझे लगता है कि यह एक मूर्ख सवाल है और शायद इसका एक सरल जवाब है।एक नए _id

मैं मोंगो डीबी में एक दस्तावेज़ को डुप्लिकेट कैसे कर सकता हूं, नए के _id को बदल रहा हूं?

इमेजिंग आप मूल दस्तावेज है:

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

और अब मैं _ id 'अलविदा' के साथ संग्रह में एक और दस्तावेज़ चाहते हैं।

उत्तर

83

बस आईडी बदलें और फिर से डालें।

> 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" संपत्ति को नष्ट करना चाहते हैं: यह कारण हो सकता है orig._id –

12

आप प्रतिलिपि दस्तावेज़ में एक नया ऑब्जेक्ट आईडी दे सकते हैं। मोंगो में शेल

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 कुंजी त्रुटि नकल इंडेक्स ' –

+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); 
}) 
संबंधित मुद्दे