2012-03-24 11 views
11

मुझे dbshell के माध्यम से संग्रह में किसी ऑब्जेक्ट को डुप्लिकेट (क्लोन) करने की आवश्यकता है। कुछ इस तरह हो रही है:एक ही डीबी के संग्रह में आप एक मोंगोडीबी ऑब्जेक्ट को क्लोन (डुप्लिकेट) कैसे क्लोन करते हैं?

> db.users.distinct('nickname') 
[ 
     "user1", 
     "user2", 
     "user3", 
     "user4" 
] 
> 

जहां user1 उपयोगकर्ताओं संग्रह में एक जटिल वस्तु का चयन, मैं कैसे userx में वस्तु तो बदल (नाम बदलने) user1 क्षेत्र नकल कर सकते हैं?

उत्तर

14

कोड

> user = db.users.findOne({'nickname': 'user1'}) 
> user.nickname = 'userX' 
> delete user['_id'] 
> db.users.insert(user) 

विवरण

आप उपयोगकर्ता वस्तु खोजने के लिए और यह चर में डाल की जरूरत है। आपको अपनी इच्छित संपत्ति को संशोधित करने की आवश्यकता है और आपको पूरे ऑब्जेक्ट को नए के रूप में डालने की आवश्यकता है। यह प्राप्त करने के लिए कि आपको पहले से मौजूद _id संपत्ति को हटाना होगा। और नया बनाने के लिए बस insert का उपयोग करें।

+0

बहुत अच्छा है कि, धन्यवाद –

+0

@ LucaG.Soave आपका स्वागत है! धन्यवाद :) – lig

+0

@ LucaG.Soo मेरे कोड के लिए अपना अपडेट बदलकर इसे बदल दिया गया मूल विचार 'user1' को मिटाना नहीं था। – lig

2

_id फ़ील्ड एक आवश्यक फ़ील्ड है और हम इसे इस तरह से हटा नहीं सकते हैं। मैं जो करता हूं वह वापस ऑब्जेक्ट में जेएसओएन() को कॉल करता है और फिर _id को हटा देता है।

var rObject = dbObject.toJSON(); 
delete rObject._id; 
db.insert(rObject); 
5

_id संपत्ति को न हटाएं; किसी कारण से कुछ मूल्य type खो देते हैं। उदाहरण के लिए, पूर्णांक को युगल में परिवर्तित कर दिया जाता है।

उपयोग this solution:

var user = db.users.findOne(...) 
user._id = new ObjectId() 
// set other properties 
db.users.insert(user) 
+0

इस उत्तर को अधिक ध्यान देना चाहिए ... – frhd

संबंधित मुद्दे