【发布时间】:2014-09-23 23:15:29
【问题描述】:
我是节点 (v0.10) 堆栈的新手。 我正在努力实现以下目标:
我在最新的 MongoDB 中有(希望)多语言文章,例如:
_id
...more fields...
text: [
{lang: 'en', title: 'some title', body: 'body', slug: 'slug'},
....
]
每次我以特定语言显示文章时,我都会查询如下:
var query = Model.findOne({'text.slug': slug});
query.exec(function(err, doc){
async.each(doc.text, function(item, callback){
if (item.lang == articleLang) {
//populate the article to display
}
});
res.render('view', {post:articleToDisplay});
});
Slug 对于每种语言都是独一无二的! 我遇到的问题是 mongo 将返回包含所有子文档的整个文档,而不仅仅是我搜索的子文档。现在我必须选择遍历所有子文档并在客户端显示适当的子文档,或者在服务器上使用 async.each 来获取我需要的子文档并仅发送到那个视图。我在服务器上使用异步进行。那样行吗? async 也异步迭代,但节点仍然等待整个循环完成,然后渲染视图。我是否错过了任何认为用户实际上被阻止直到 async.each 完成的东西?我仍在尝试围绕这种异步执行进行思考。有没有办法可以改进我管理此代码的方式?这似乎是子文档的标准程序!
提前感谢您的帮助。
【问题讨论】:
标签: node.js mongodb asynchronous