[英]How can I get the result of MongoDB's collection.aggregate() in NodeJS callback?
[英]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.