2013-08-06 113 views
1

我似乎無法找到使用Node.js中的mongodb模塊檢索有關數據庫當前操作的信息的方法。如何使用MongoDB本地Node.js驅動程序運行db.currentOp()?

我曾嘗試一些這樣的:

mongodb = require 'mongodb' 
server = new mongodb.Server 'localhost', 27017 
connector = new mongodb.Db 'test', server 

connector.open (err, db) -> 
    if not err? 
     db.admin().command {currentOp: 1}, (err, doc) -> 
      if not err? 
       console.log doc 
當然

沒有任何結果。

有人有指針嗎?

回答

1

儘管這是一個shell命令,但它不是一個真正的命令。相反,您需要使用findOne()來查詢$cmd.sys.inprog集合。在MongoDB的殼,你會怎麼做:

db.$cmd.sys.inprog.findOne(); 
+0

感謝您給我們的信息!看起來這是一個功能仍然需要在Node.js的本地MongoDB驅動程序中實現... – sprijk

+0

我會問這是否是前進的方向。 – Derick

+0

如何使用db.killOp(opid)使用MongoDB本機Node.js驅動程序? – rajeshpanwar

-1

這似乎是工作,忽視了Node.js的MongoDB的本地驅動程序

exec = require('child_process').exec 

exec '/usr/bin/mongo --quiet --host="localhost:27017" "test" --eval "printjson(db.currentOp())"', (err, stdout) -> 
    console.error "#{err.message}" if err? 

    console.log JSON.parse stdout 

不應該在驅動程序中實現此功能嗎?

6

的方式直接從節點MongoDB的本地驅動程序做到這一點:

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

MongoClient.connect('mongodb://127.0.0.1:27017/', function (err, db) { 

    if (err) { throw err; } 

    db.collection('$cmd.sys.inprog').findOne(function (err, data) { 

     if (err) { throw err; } 
     console.log(data.inprog); 

    }); 
}); 
+0

如何使用db.killOp(opid)使用MongoDB本地Node.js驅動程序? – rajeshpanwar

+0

當我使用上面的代碼時,似乎'MongoClient'預先添加了默認的集合名稱。然後它提出一個錯誤,說'無效的集合名稱:admin。$ cmd.sys.inprog'。有沒有人遇到同樣的問題? –

+0

我終於找到了問題。他們從MongoDB 3.2的郵件主題https://groups.google.com/forum/#!topic/mongodb-user/2BpMd8mlEvI表示,客戶端無法通過'find'觸摸系統收集。現在,如果我使用db.command({currentOp:1})'我可以返回結果。 –

0

你想在MongoDB的3.2使用currentOp命令(見db.currentOp有關詳細信息,外殼定義)。

db.eval("return db.currentOp()",function (err, data) { console.log('currentOp',err,data); });

相關問題