【发布时间】:2017-06-16 14:59:37
【问题描述】:
我正忙于研究报告系统的端点。节点异步给我带来了问题,尽管我不想强迫它同步。
我们正在使用 MongoDB 和 Mongoose。我必须查询集合 A 的正则表达式,然后对于返回的每个文档,查询多个包含的文档以填充要返回的 JSON 对象/数组。
我可以对大部分数据使用populate,除了最后的循环查询,这是异步启动并提前返回我的报告的地方。有没有一种优雅的方式来做到这一点?还是我应该拆分成不同的函数并多次调用它以遵守functions should do only one thing 规则?
示例代码:
A.find({ name: regex }).populate({ path: 'B', populate: { path: 'B.C', model: 'C' } }).exec(function(err, A) {
var report = [];
A.map(function(a)){
report[a.name] = [];
D.aggregate([
{
$match: {
id: B._id
}
},
{
$group: {
_id: null,
count: { $sum: 1 }
}
}
], function(err, result) {
C.map(function(c){
report[a.name].push({
'field1': c.field1,
'field2': c.field2,
'field3': c.field3,
'count': result.count
});
});
});
}
return report;
});
这里的问题在于逻辑/异步。不是语法,因此是半伪代码。
任何帮助或建议将不胜感激。
【问题讨论】:
标签: javascript node.js mongodb asynchronous