sql >> Database >  >> NoSQL >> MongoDB

Mongo Copy Collection en gebruikersmachtigingen

Volgens de collection.copyTo() documentatie in MongoDB 2.4, deze shell-helper "kopieert alle documenten van de verzameling naar newCollection met behulp van server-side JavaScript".

Ik verwacht de reden dat je een unauthorized . krijgt fout is omdat de server-side db.eval() commando vereist volledige beheerdersrechten in MongoDB 2.4 (meerdere rollen op de admin database).

Je kunt de bron voor deze helper zien in de mongo shell als u copyTo() . aanroept zonder de () :

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

Vanwege het gebruik van server-side db.eval() , zijn er verschillende belangrijke waarschuwingen op copyTo() gebruik inclusief waarschuwingen over type-getrouwheid en vergrendelingsproblemen. Ik geloof dat deze helper alleen bedoeld is om te worden gebruikt in ontwikkelomgevingen met meer open rechten, in plaats van in een productieomgeving.

DIY-kopie van de mongo schelp

Dat is niet helemaal een gekke optie :). Hier is een simpele one-liner voor de mongo shell (vervang source en target collecties zoals van toepassing):

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

Als u zich zorgen maakt over de netwerkbandbreedte, kunt u dit uitvoeren vanaf een mongo shell die lokaal is op uw MongoDB-server.

Kopieer met mongodump / mongorestore

Een betere manier om een ​​verzameling te kopiëren (hoewel niet rechtstreeks van de mongo shell) zou zijn om mongodump . te gebruiken &mongorestore :

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



  1. AWS Lambda (Node.js, v. 8.10) &Mongoose:MongoNetworkError verbinding met DB time-out

  2. Best practices voor het uitvoeren van MongoDB in een cluster

  3. MongooseError [MongooseServerSelectionError]:verbinding <monitor> naar 52.6.250.237:27017 gesloten

  4. MongoDB C#-stuurprogramma 'Cursor niet gevonden'