sql >> Base de Datos >  >> NoSQL >> MongoDB

Colección de copias de Mongo y permisos de usuario

Según el collection.copyTo() documentación en MongoDB 2.4, este asistente de shell "copia todos los documentos de la colección en newCollection usando JavaScript del lado del servidor".

Espero la razón por la que está recibiendo un unauthorized el error se debe a que el lado del servidor db.eval() comando requiere permisos de administrador completos en MongoDB 2.4 (múltiples roles en el admin base de datos).

De hecho, puede ver la fuente de este ayudante en mongo shell si invoca copyTo() sin el () :

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

Debido al uso de db.eval() del lado del servidor , hay varias advertencias importantes en copyTo() uso, incluidas las precauciones sobre la fidelidad del tipo y los problemas de bloqueo. Creo que este asistente solo está diseñado para usarse en entornos de desarrollo con permisos más abiertos, en lugar de un entorno de producción.

Copia de bricolaje del mongo concha

Esa no es una opción completamente loca :). Aquí hay una sola línea para el mongo shell (reemplace source y target colecciones según corresponda):

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

Si le preocupa el ancho de banda de la red, puede ejecutarlo desde un mongo shell que es local para su servidor MongoDB.

Copiar con mongodump / mongorestore

Un mejor enfoque para copiar una colección (aunque no directamente desde mongo shell) sería usar mongodump &mongorestore :

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