MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongo Copy Collection und Benutzerberechtigungen

Per collection.copyTo() Dokumentation in MongoDB 2.4, dieser Shell-Helfer "kopiert alle Dokumente aus der Sammlung in newCollection mit serverseitigem JavaScript".

Ich erwarte den Grund, warum Sie einen unauthorized erhalten Fehler liegt daran, dass serverseitig db.eval() Befehl erfordert vollständige Administratorberechtigungen in MongoDB 2.4 (mehrere Rollen im admin Datenbank).

Sie können die Quelle für diesen Helfer tatsächlich im mongo sehen Shell, wenn Sie copyTo() aufrufen ohne () :

> db.test.copyTo
function ( newName ){
    return this.getDB().eval(
        function( collName , newName ){
            var from = db[collName];
            var to = db[newName];
            to.ensureIndex( { _id : 1 } );
            var count = 0;

            var cursor = from.find();
            while ( cursor.hasNext() ){
                var o = cursor.next();
                count++;
                to.save( o );
            }

            return count;
        } , this.getName() , newName
    );
}

Aufgrund der serverseitigen Verwendung von db.eval() , gibt es mehrere wichtige Warnungen auf copyTo() Verwendung, einschließlich Warnungen zur Typtreue und zu Sperrproblemen. Ich glaube, dass dieser Helfer nur für die Verwendung in Entwicklungsumgebungen mit offeneren Berechtigungen gedacht ist und nicht in einer Produktionsumgebung.

DIY-Kopie aus dem mongo Schale

Das ist keine völlig verrückte Option :). Hier ist ein einfacher Einzeiler für den mongo Shell (ersetzen Sie source und target Sammlungen wie zutreffend):

db.source.find().forEach( function(d) {db.target.insert(d)});

Wenn Sie sich Sorgen um die Netzwerkbandbreite machen, können Sie dies von einem mongo ausführen Shell, die für Ihren MongoDB-Server lokal ist.

Mit mongodump kopieren / mongorestore

Ein besserer Ansatz zum Kopieren einer Sammlung (wenn auch nicht direkt aus dem mongo Shell) wäre die Verwendung von mongodump &mongorestore :

$ mongodump -d test -c source 
$ mongorestore -d test -c target dump/test/source.bson