簡體   English   中英

如何通過回調訪問nodejs中的mongodb計數結果?

[英]How can I access mongodb count results in nodejs with a callback?

如何訪問nodejs中的mongodb計數結果,以便異步請求可以訪問該結果? 我可以獲得結果並更新數據庫,但異步請求無法訪問 vars 或 vars 為空,並且在發出下一個異步請求時 vars 似乎已更新。 請求不能等待查詢完成,並且下一個請求會填充上一個請求的變量。

testOne.increment = function(request) {   
    var MongoClient = require('mongodb').MongoClient,
        format = require('util').format;
    MongoClient.connect('mongodb://127.0.0.1:27017/bbb_tracking', function(err, db) {
    if (err) throw err;
    collection = db.collection('bbb_tio');
        collection.count({vio_domain:dom}, function(err, docs) {
    if (err) throw err;                                     
    if (docs > 0) {
            var vio_val = 3;                                        
        } else {
            var vio_val = 0;                    
        }                   
        if (vio_val === 3) {
                event = "New_Event";
        var inf = 3;
            }                                       
        db.close();

        console.log("docs " + docs);
        });       
   });                    
};

在上面,即使在范圍內設置了變量,它們也不是異步定義的。 我能否獲得一些有關正確構建此結構的指導,以便在回調中填充變量。 謝謝!

由於count函數是異步的,因此您需要將回調傳遞給increment函數,以便在從數據庫返回count時,代碼可以調用回調。

testOne.increment = function(request, callback) {   
    var MongoClient = require('mongodb').MongoClient,
        format = require('util').format;
    MongoClient.connect('mongodb://127.0.0.1:27017/bbb_tracking', function(err, db) {
        if (err) throw err;
        var collection = db.collection('bbb_tio');
        // not sure where the dom value comes from ?
        collection.count({vio_domain:dom}, function(err, count) {
            var vio_val = 0;
            if (err) throw err;                                     
            if (count > 0) {
                vio_val = 3;                                        
                event = "New_Event";
                var inf = 3;
            }                                       
            db.close();

            console.log("docs count: " + count);        
           // call the callback here (err as the first parameter, and the value as the second)
           callback(null, count);   
        });       
   });                 
};

testOne.increment({}, function(err, count) {
   // the count would be here...
});

(我不明白你使用的變量是什么意思,或者為什么以后不使用它們,所以我只是做了一些清理。變量的作用域是函數塊並被提升到函數,所以你不不需要像您對vio_val所做的那樣在每個 if 塊中重新聲明它們)。

您可以使用“異步”模塊。 它使代碼更清晰,更易於調試。 在下面的帖子中查看 GitHub 中 adduser.js 和 deleteuser.js 的代碼

http://gigadom.wordpress.com/2014/11/05/bend-it-like-bluemix-mongodb-using-auto-scaling-part-2/

問候甘尼什

長度給你結果數組的計數

  const userdata = await User.find({ role: role, 'name': new RegExp(searchkey, 'i')  },{date: 0,__v:0,password:0}).
      sort(orderObj)
      .limit(limit)
      .skip(skip);



      console.log(userdata.length);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM