MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongo Copy Collection e autorizzazioni utente

Secondo collection.copyTo() documentazione in MongoDB 2.4, questo helper della shell "copia tutti i documenti dalla raccolta in newCollection usando JavaScript lato server".

Mi aspetto il motivo per cui stai ricevendo un unauthorized l'errore è dovuto al fatto che il lato server db.eval() comando richiede autorizzazioni di amministratore complete in MongoDB 2.4 (ruoli multipli su admin banca dati).

Puoi effettivamente vedere la fonte di questo helper nel mongo shell se invochi copyTo() senza il () :

> 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
    );
}

A causa dell'uso di db.eval() lato server , sono presenti diversi avvisi significativi su copyTo() utilizzo comprese le precauzioni sulla fedeltà del tipo e sui problemi di blocco. Ritengo che questo helper debba essere utilizzato solo in ambienti di sviluppo con autorizzazioni più aperte, piuttosto che in un ambiente di produzione.

Copia fai-da-te dal mongo guscio

Non è un'opzione del tutto folle :). Ecco una semplice riga per il mongo shell (sostituisci source e target raccolte a seconda dei casi):

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

Se sei preoccupato per la larghezza di banda della rete, puoi eseguirlo da un mongo shell che è locale al tuo server MongoDB.

Copia con mongodump / mongorestore

Un approccio migliore alla copia di una raccolta (sebbene non direttamente da mongo shell) sarebbe usare mongodump &mongorestore :

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