我有这个函数,我想返回一个mongo查询的值,但我得到未定义的值。我试图读取测试数据库的用户集合中所有用户的电子邮件地址。
这是我的代码:
var mongo = require('mongodb').MongoClient;
var connectionString = "mongodb://cannotdivulge.info.com:53778/testdb";
var users;
var db = mongo.connect(connectionString, function(err, db) {
if(err)
throw err;
console.log("connected to database");
users = db.collection('users');
});
exports.findAll = function(req, res) {
var cursor = users.find();
var result;
cursor.each(function(err, doc) {
if(err)
throw err;
result = doc.Email;
});
res.send(result);
};
结果应该等于电子邮件地址但是未定义。 doc.Email的值未保留。当我将res.send()放在cursor.each()中时,它将返回一个值。
另外,我需要在实际返回它的值之前在函数中使用结果变量。这就是为什么我需要保留它的价值。
答案 0 :(得分:3)
您的findall
功能是异步的。只有在完成列表后才需要返回结果。在您的代码中,函数在result
的第一个回调开始之前返回each
的值。
exports.findAll = function(req, res) {
var cursor = users.find();
var result = [];
cursor.each(function(err, doc) {
if(err)
throw err;
if (doc === null) {
// doc is null when the last document has been processed
res.send(result);
return;
}
// do something with each doc, like push Email into a results array
result.push(doc.Email);
});
};