2011-01-14 29 views
16

Tüm komutların görebildiğim kadarıyla mongodb'de aynı veritabanında çalışıyorum. Böyle bir şey yapmak istiyorum.Bir mongo veritabanından diğerine nasıl kayıt eklerim?

db.mySourceCollection.find() forEach (function (x) {db.theDestinationCollection.save (x)}); mySourceCollectionliveDatabase ve theDestinationCollection üzerindedir

testDatabase üzerindedir. Yukarıda gösterilen ettik

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

db

cevap

15

Kullanım use :-), ancak use komutunu kullanarak anında veritabanlarını geçiş yapabilirsiniz, şu anda bağlı veritabanına başvurmak için kullanılır.

Kabuktaki help komutunu gözden geçirin - bu komuttan bahseder ve çok daha fazlası!

+0

Teşekkürler! Kullanım hakkında bilgi sahibi oldum, ama durumu bir değişkende devam ettirmeyi düşünmezdim. IMHO Akışkan kullanımı için db üzerinde bir use() yönteminin, örn. db.use ('sourceDb'), collectionA.do (db.use ('destDb') . – b7kich

+0

Veritabanının UTF-8 karakterleri olması olabilir, çünkü istemciden çalışırsa, istemci yerel olanıysa (örneğin Ubuntu, '$ Mongo --version' =>' MongoDB kabuk sürümü: 1.6.3') UTF-8'den yoksun olabilir ve daha sonra kopya başarısız olur. Bu durumda ve eğer koymak istemiyorsanız Yeni bir istemciyi yeniden derlemek için sunucunuza kirli, her zaman ayrı bir makineye yeniden derleme yapabilir ve bu işi uzak bir sunucuya bağlanan ağ üzerinden yapabilirsiniz.Ama yine de, veriler sunucudan istemciye ve tersine akacaktır. Her neyse, uzak bir UTF-8 istemcisi ile çalışıyor! –

13
use dbname metne modda çalışmaz

(yani javascript ile kabuk komut dosyası sırasında) 'db' değişkeni, örneğin Atanacak yerine db.getSiblingDB() yöntemi kullanmalısınız nedenle, burayı

db = db.getSiblingDB("otherdb") 

diğer bilgiler : http://www.mongodb.org/display/DOCS/Scripting+the+shell

İlgili konular