我正在尝试查找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:代码已更新。
答案 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
之类的异步流控制模块来实现此目的。