2011-01-14 16 views
16

O ile widzę wszystkie polecenia działają na tej samej bazie danych w mongodb. Chcę zrobić coś takiego:.Jak wstawić rekord z jednej bazy danych mongo do drugiej?

db.mySourceCollection.find() foreach (function (x) {db.theDestinationCollection.save (x)});

gdzie mySourceCollection jest liveDatabase i theDestinationCollection jest testDatabase.

Odpowiedz

15

Zastosowanie use :-)

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

db jest używany w odniesieniu do aktualnie podłączonej bazy danych, jednak można przełączyć baz danych w locie przy użyciu komendy use, jak już przedstawiono powyżej.

Sprawdź komendę help w powłoce - wspomina to polecenie i wiele więcej!

+0

Dzięki! Wiedziałem o użyciu, ale nie myślałem o utrzymywaniu stanu w zmiennej. IMHO Spodziewałbym się metody use() na db dla płynów, np. db.use ('sourceDb'). collectionA.do (db.use ('destDb'). – b7kich

+0

Może się zdarzyć, że baza danych ma znaki UTF-8, ponieważ jest uruchamiana przez klienta, jeśli klient jest rodzimy (na przykład dla Ubuntu, '$ mongo --version' =>' Wersja powłoki MongoDB: 1.6.3') może brakować UTF-8, a następnie kopia się nie powiedzie. Jeśli tak jest i nie chcesz tego robić zabrudzony do serwera w celu przekompilowania nowego klienta, zawsze można przekompilować go na osobny komputer i wykonać to zadanie przez sieć, łącząc się ze zdalnym serwerem, jednak dane będą przesyłane z serwera do klienta iz powrotem, aby można było powolne, w każdym razie ze zdalnym klientem UTF-8, działa !!! –

13

use dbname nie działa w trybie skryptów (czyli gdy skryptów powłoki z JavaScript), więc należy użyć metody db.getSiblingDB() zamiast przypisanie „db” zmienna, np

db = db.getSiblingDB("otherdb") 

Więcej informacji tutaj : http://www.mongodb.org/display/DOCS/Scripting+the+shell

Powiązane problemy