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

Mongo Copy Collection og brugertilladelser

Ifølge collection.copyTo() dokumentation i MongoDB 2.4, denne shell-hjælper "kopierer alle dokumenter fra samling til newCollection ved hjælp af server-side JavaScript".

Jeg forventer grunden til, at du får en uautoriseret fejlen skyldes, at serversiden db.eval( ) kommando kræver fulde administratortilladelser i MongoDB 2.4 (flere roller på admin database).

Du kan faktisk se kilden til denne hjælper i mongo shell, hvis du kalder copyTo() uden () :

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

På grund af brugen af ​​db.eval() på serversiden , er der adskillige væsentlige advarslercopyTo() brug, herunder advarsler om typetroskab og låseproblemer. Jeg tror, ​​at denne hjælper kun er beregnet til at blive brugt i udviklingsmiljøer med mere åbne tilladelser, snarere end et produktionsmiljø.

Gør-det-selv-kopi fra mongo skal

Det er ikke en helt tosset mulighed :). Her er en simpel one-liner til mongo shell (erstat kilde og mål samlinger efter behov):

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

Hvis du er bekymret for netværksbåndbredden, kan du køre dette fra en mongo shell, som er lokal for din MongoDB-server.

Kopiér med mongodump / mongorestore

En bedre tilgang til at kopiere en samling (dog ikke direkte fra mongo shell) ville være at bruge mongodump &mongorestore :

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



  1. kan ikke få adgang til req.users egenskaber

  2. $near forespørgsel gennem Java

  3. mongodb-indsættelse viser 'strenge i dokumenter skal være gyldige UTF-8'

  4. Er redis på Heroku muligt uden en tilføjelse?