MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Coleção de cópias do Mongo e permissões de usuário


De acordo com o collection.copyTo() documentação no MongoDB 2.4, este shell helper "copia todos os documentos da coleção em newCollection usando JavaScript do lado do servidor".

Espero que o motivo pelo qual você está recebendo um unauthorized erro é porque o lado do servidor db.eval() comando requer permissões totais de administrador no MongoDB 2.4 (várias funções no admin base de dados).

Você pode realmente ver a fonte deste auxiliar no mongo shell se você invocar copyTo() sem o () :
> 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
    );
}

Devido ao uso de db.eval() do lado do servidor , existem vários avisos significativos em copyTo() uso, incluindo cuidados sobre fidelidade de tipo e problemas de bloqueio. Acredito que este auxiliar destina-se apenas a ser usado em ambientes de desenvolvimento com permissões mais abertas, em vez de um ambiente de produção.

Cópia DIY do mongo casca


Essa não é uma opção totalmente louca :). Aqui está uma linha simples para o mongo shell (substitua source e target coleções conforme apropriado):
db.source.find().forEach( function(d) {db.target.insert(d)});

Se você está preocupado com a largura de banda da rede, você pode executá-lo em um mongo shell que é local para seu servidor MongoDB.

Copiar com mongodump / mongorestore


Uma abordagem melhor para copiar uma coleção (embora não diretamente do mongo shell) seria usar mongodump &mongorestore :
$ mongodump -d test -c source 
$ mongorestore -d test -c target dump/test/source.bson