2016-04-04 9 views
2

私は、データベースをコピーするNodeJSのMongoDBネイティブドライバを使用してdb.copyDatabaseを実行するにはどうすればよいですか?

mongo --eval "db.copyDatabase('somedatabase', 'somedatabase_duplicate', 'sourcehost')" 

を起動するシェルスクリプトを持っています。

現在、私はNode.JSアプリケーション内で同じことをやっています。

mongoCommand = `db.copyDatabase("somedatabase", "somedatabase_duplicate", "localhost")`; 
db.command(mongoCommand, function(commandErr, data) { 
     if(!commandErr) { 
     log.info(data); 
     } else { 
     log.error(commandErr.errmsg); 
     } 
    }); 

「このようなコマンドはありません」というエラーメッセージが常に表示されます。

解説:db.admin()。command()を使用すると、同じ問題が発生し、enter link description hereで提案されているコマンドも使用されます。

このコマンドを呼び出す正しい方法、あるいはNode.JSからデータベースを複製する方法は何ですか?

+1

可能な重複(http://stackoverflow.com/questions/16576541/clone-database-in-mongodb-between-hosts -using-node-driver) –

答えて

3

管理操作であるデータベースをコピーしようとしているので、管理者アカウントと関係があります。再度、データベースコマンドをコピーするにはcopydbです。

シェルでこのコマンドを実行しようとすると、db.copyDatabaseが表示され、sourceコマンドが表示されます。

試み:[ノードのドライバを使用してホスト間のMongoDBにおけるクローンデータベース]の

var assert = require('assert'); 
var MongoClient = require('mongodb').MongoClient; 


var url = 'mongodb://localhost:27017/test'; 

MongoClient.connect(url, function(err, db) { 
    if (err) { 
     console.log(err); 
    } 
    else { 

     var mongoCommand = { copydb: 1, fromhost: "localhost", fromdb: "test", todb: "test_dup" }; 
     var admin = db.admin(); 

     admin.command(mongoCommand, function(commandErr, data) { 
      if (!commandErr) { 
       console.log(data); 
      } else { 
       console.log(commandErr.errmsg); 
      } 
      db.close(); 
     }); 
    } 
}); 
+0

これは何もしないようです。コールバックは実行されません。ノードは終了し、MongoDBログには何も表示されません。 –

+0

サーバーにデータベースコピーがあるかどうか確認してください。また、管理データベースにアクセスする権限があることを確認してください。私の場合は、メッセージ '{ok:1} 'が表示されます。 – Saleem

+0

出力がゼロになり、新しいデータベースはありません。バッチファイルを使用する場合、それは動作します。それは私が頭を包むことができないものです。 –

関連する問題