我正在查询我的数据库,按日期扫描他们的文章。用户选择日期,服务器查找用户的书面文章ID列表,扫描文章集合中的ID,然后将请求的日期与文档的“createdAt”条目进行比较。但是如果有多个结果,我会在发送错误后得到一个'不能设置的标题。'这是我的代码:
User.find({_id: user._id}, {written: 1}, function (err, docs) {
if (err) throw err
for (i = 0; i < docs[0].written.length; i++) {
Articles.find({_id: docs[0].written[i]}, function (err, docs) {
if (err) throw err
if (req.query.date == Math.floor(docs[0].createdAt.getTime() / 1000 / 86400)) {
res.send(docs)
}
})
}
})
答案 0 :(得分:1)
你需要使用像async(https://github.com/caolan/async)或async-mini(https://github.com/ypocat/async-mini这样的东西来为你做实际的循环,然后当所有的查询都完成后你可以回复一系列文章。
或者,您可以拥有一个单独的函数,在完成所有操作后调用它。以下是使用async.each执行所需操作的一种方法。
var articles = [];
User.find({_id: user._id}, {written: 1}, function (err, docs) {
if (err) throw err;
async.each(docs[0].written, function(doc, done){
Articles.find({_id: doc}, function (err, articlesFound) {
if (err) done(err)
if (req.query.date == Math.floor(doc.createdAt.getTime() / 1000 / 86400)) {
articles.push(articlesFound);
}
});
}, function(err){
if(err) throw err;
return res.send(articles);
});
});
我认为这就是你所追求的目标。