2011-01-14 11 views
16

जहाँ तक मैं सभी आदेशों को mongodb में एक ही डेटाबेस पर संचालित करता हूं। मैं इस तरह कुछ करना चाहता हूँ:।मैं एक मोंगो डेटाबेस से दूसरे में रिकॉर्ड कैसे डालूं?

db.mySourceCollection.find() foreach (समारोह (एक्स) {db.theDestinationCollection.save (x)});

जहां mySourceCollectionliveDatabase और theDestinationCollection पर है testDatabase पर है।

उत्तर

15

उपयोग use :-)

> var documents = db.mySourceCollection.find() 
> use testDatabase 
switched to db testDatabase 
> documents.forEach(function(x){ db.theDestinationCollection.insert(x) }) 

db, हालांकि आप मक्खी use आदेश का उपयोग पर डेटाबेस स्विच कर सकते हैं, जैसा कि मैंने ऊपर दिखाए गए हैं वर्तमान में जुड़े डेटाबेस का उल्लेख किया जाता है।

खोल में help कमांड देखें - यह इस आदेश का उल्लेख करता है और बहुत कुछ!

+0

धन्यवाद! मुझे उपयोग के बारे में पता था, लेकिन मैं एक चर में राज्य को कायम रखने का विचार नहीं किया होगा। आईएमएचओ मैं द्रव उपयोग के लिए डीबी पर एक उपयोग() विधि की अपेक्षा करता हूं, उदा। db.use ('sourceDb')। collectionA.do (db.use ('destDb') – b7kich

+0

ऐसा हो सकता है कि डेटाबेस में यूटीएफ -8 वर्ण हैं। चूंकि यह क्लाइंट के माध्यम से चलता है, यदि क्लाइंट मूल है (उदाहरण के लिए उबंटू के लिए, '$ mongo --version' =>' MongoDB खोल संस्करण: 1.6.3') इसमें यूटीएफ -8 की कमी हो सकती है और फिर प्रतिलिपि विफल हो जाएगी। अगर ऐसा है और आप नहीं रखना चाहते हैं एक नए ग्राहक को फिर से कंपाइल करने के लिए अपने सर्वर में गंदे, आप हमेशा एक अलग मशीन में पुन: संकलित कर सकते हैं और रिमोट सर्वर से नेट कनेक्टिंग पर यह काम कर सकते हैं। फिर भी, डेटा सर्वर से क्लाइंट और बैक पर बह जाएगा, इसलिए यह हो सकता है धीमी। किसी भी तरह एक दूरस्थ यूटीएफ -8 क्लाइंट के साथ, काम करता है !!! –

13

use dbname पटकथा मोड में काम नहीं करता है (यानी जब जावास्क्रिप्ट के साथ खोल स्क्रिप्ट) है, तो आप db.getSiblingDB() विधि के बजाय का उपयोग करना चाहिए 'डाटाबेस' चर, जैसे पुन: असाइन करने: यहाँ

db = db.getSiblingDB("otherdb") 

और जानकारी : http://www.mongodb.org/display/DOCS/Scripting+the+shell

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