nodejs + mongodb - 找空

时间:2014-01-19 13:39:17

标签: javascript node.js mongodb express

我正在尝试查找post_id与我正在搜索的行相同的所有行。但每次我做的结果都是空的,我会仔细检查所有的值,我应该得到一些结果。

这是我正在使用的方法:

db.collection('posts', function(err, collection) {
    collection.find({}, {}, {limit:100}).toArray(function(err, posts) {
        if (err) res.send({'error':1,'message':'error getting all posts'});
        console.log('Number of posts: ' + posts.length);
        posts.forEach(function(entry) {
            db.collection('love', function(err, collection) {
                collection.find({}, function(err, love) {
                    if (err) console.log(err);
                    if (!love) console.log("empty");
                    if (love) {
                        console.log(love);
                        entry.love = love;
                    }
                });
            });
        });
        res.send(JSON.stringify(posts));
    });
});

如果我有结果,它总是进入第三个但是在控制台中我总是从结果中得到[]。我知道我做错了吗?

EDIT1:代码已更新。

1 个答案:

答案 0 :(得分:1)

该回调中的love是游标,而不是文档数组。要将其设为数组,请在第一个查询中调用toArray;像这样:

collection.find({}).toArray(function(err, love) {
    if (err) console.log(err);
    if (!love) console.log("empty");
    if (love) {
        console.log(love);
        entry.love = love;
    }
});

此外,您的下一个问题可能是您的res.send来电不会包含任何love文档,因为它会在任何love回调之前发生。您需要延迟调用res.send,直到收到所有回调为止。您可以通过保留未完成的回调计数或使用async之类的异步流控制模块来实现此目的。