nodejs mongodb游标问题

时间:2013-11-29 21:34:35

标签: node.js mongodb express

我有这个函数,我想返回一个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()中时,它将返回一个值。

另外,我需要在实际返回它的值之前在函数中使用结果变量。这就是为什么我需要保留它的价值。

1 个答案:

答案 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);
    });
};