3

我似乎找不到使用Node.js中的mongodb模块检索有关数据库当前操作的信息的方法。

我已经尝试过这样的事情:

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

当然没有任何结果。

有人有指针吗?

4

5 回答 5

8

直接从节点 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);

    });
});
于 2013-10-13T10:00:12.393 回答
0

尽管它是 shell 上的命令,但它不是真正的命令。相反,您需要使用 查询$cmd.sys.inprog集合findOne()。在 MongoDB shell 上,你会这样做:

db.$cmd.sys.inprog.findOne();
于 2013-08-06T10:47:43.817 回答
0

使用猫鼬实现:

        let db = mongoose.connection.db;
        db.command({ currentOp: 1 }, function (err, result) {
            if (err) {
                console.error(`Agenda :: Kill long mongo queries | Error: ${err}`);
            } else {
                for (let oper in result.inprog) {
                    let op = result.inprog[oper - 0];
                    if (op.secs_running > ENUMS.MONGO_KILL_AFTER_SECONDS && op.op === "query" && !op.ns.startsWith("local")) {
                        console.info(`Agenda :: Kill long mongo queries | Killing opId: ${op.opid} Running over ${op.secs_running}`);
                        db.killOp(op.opid);
                    }
                }
            }
        });

基于要点

于 2018-05-24T15:15:09.503 回答
0

您需要在 MongoDB 3.2 上使用 currentOp 命令(有关详细信息,请参阅db.currentOp的 shell 定义)。

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

于 2016-12-27T06:33:12.500 回答
-2

这似乎有效,忽略了 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

这个功能不应该在驱动中实现吗?

于 2013-08-06T12:46:52.287 回答