sql >> Databáze >  >> NoSQL >> MongoDB

Mongo Copy Collection a uživatelská oprávnění

Podle collection.copyTo() dokumentaci v MongoDB 2.4, tento pomocník shellu „zkopíruje všechny dokumenty z kolekce do newCollection pomocí JavaScriptu na straně serveru“.

Očekávám důvod, proč dostáváte unauthorized chyba je, protože na straně serveru db.eval() příkaz vyžaduje úplná oprávnění správce v MongoDB 2.4 (více rolí na admin databáze).

Zdroj tohoto pomocníka můžete ve skutečnosti vidět v mongo shell, pokud zavoláte copyTo() bez () :

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

Kvůli použití db.eval() na straně serveru , existuje několik významných varování na copyTo() použití včetně upozornění na věrnost typu a problémy se zamykáním. Věřím, že tento pomocník je určen pouze k použití ve vývojových prostředích s více otevřenými oprávněními, spíše než v produkčním prostředí.

Udělejte si kopii z mongo shell

To není úplně šílená varianta :). Zde je jednoduchý jednoduchý řádek pro mongo shell (nahraďte source a target sbírky podle potřeby):

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

Pokud máte obavy o šířku pásma sítě, můžete to spustit z mongo shell, který je lokální na vašem serveru MongoDB.

Kopírujte pomocí mongodump / mongorestore

Lepší přístup ke kopírování kolekce (i když ne přímo z mongo shell) by bylo použít mongodump &mongorestore :

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



  1. Ve Flasku převeďte objekt POST z formuláře na reprezentaci vhodnou pro mongodb

  2. Upgrade na ClusterControl Enterprise Edition

  3. Mám vrátit pole nebo data jeden po druhém v Mongoose

  4. MongoError:Nepodařilo se připojit k serveru [localhost:27017] při prvním připojení