sql >> データベース >  >> NoSQL >> MongoDB

Mongoコピーコレクションとユーザー権限

    collection.copyTo()による MongoDB 2.4のドキュメントでは、このシェルヘルパーは「サーバー側のJavaScriptを使用してコレクションからnewCollectionにすべてのドキュメントをコピーします」。

    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からのDIYコピー シェル

    それは完全にクレイジーなオプションではありません:)。これが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. サーバーJSでパーシャルの読み込みに失敗する

    2. フィールドごとのオブジェクトのMongoDBルックアップ配列(結合条件と無相関サブクエリ)

    3. node.jsでのrequireの動作

    4. mongodbコレクションでいくつかの値を見つけますか?