MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Колекция за копиране на Mongo и потребителски разрешения

Според collection.copyTo() документация в MongoDB 2.4, този помощник на обвивката „копира всички документи от колекцията в newCollection, използвайки JavaScript от страна на сървъра“.

Очаквам причината да получите unauthorized грешката е, защото db.eval() команда изисква пълни администраторски разрешения в MongoDB 2.4 (множество роли на admin база данни).

Всъщност можете да видите източника за този помощник в mongo обвивка, ако извикате copyTo() без () :

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

Поради използването на db.eval() от страната на сървъра , има няколко важни предупреждения на copyTo() използване, включително предупреждения относно прецизността на типа и проблеми със заключването. Вярвам, че този помощник е предназначен да се използва само в среди за разработка с по-отворени разрешения, а не в производствена среда.

Направи си сам копие от mongo обвивка

Това не е напълно луд вариант :). Ето прост един ред за mongo обвивка (заменете source и target колекции според случая):

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

Ако сте загрижени за честотната лента на мрежата, можете да стартирате това от mongo обвивка, която е локална за вашия MongoDB сървър.

Копирайте с mongodump / mongorestore

По-добър подход за копиране на колекция (макар и не директно от mongo shell) би било да се използва mongodump &mongorestore :

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Проверете дали полето съществува с MongoDB

  2. Публикувайте множество JSON обекти едновременно с Express и Postman

  3. Как да изпълнявам mongo команди от bash?

  4. Spring mongodb компас липсват създадени данни/колекции

  5. Развиване на обработка за несъществуващ вграден документ