2016-04-04 135 views
2

我有調用如何通過NodeJS的MongoDB本地驅動程序執行db.copyDatabase?

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

複製數據庫的shell腳本。

目前我堅持從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); 
     } 
    }); 

總是在「沒有這樣的命令」錯誤消息resulsts。

編輯說明:使用db.admin()。command()會導致相同的問題,並使用enter link description here中建議的命令。

調用此命令或從Node.JS克隆數據庫的正確方法是什麼?

+1

([使用節點驅動器的主機之間MongoDB中克隆數據庫]的可能的複製http://stackoverflow.com/questions/16576541/clone-database-in-mongodb-between-hosts -using-node-driver) –

回答

3

那麼,你正試圖複製數據庫,這是管理操作,所以必須做管理員帳戶。再次,複製數據庫命令是copydb

嘗試在shell中運行此命令,db.copyDatabase,您將看到命令的來源。

嘗試:

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

我得到零輸出並且沒有新的數據庫。使用批處理文件時,它可以工作。這就是我無法包裹我的頭。 –

相關問題