【发布时间】:2018-02-28 11:51:43
【问题描述】:
您好,我需要执行多个聚合查询,并将结果呈现到视图中。我现在的问题是弄清楚如何确保所有查询在渲染之前完成,我遇到了 async.parallel。我一直试图弄乱它,但它不起作用。例如,这就是我现在拥有的。
var async = require('async');
async.parallel({
one: function(){
Country.aggregate([
{
$match: {
name: { $in: ["USA", "China", "India", "France", "Japan"]},
}
},
{
$sort: {
year: 1
}
},
{
$group: {
_id: '$name',
nominalGDP: {$push: "$nominalGDP"}
}
},
{
$project: {
_id: 0,
name: "$_id",
nominalGDP: 1
}
}
], function(err, recs){
if(err){
console.log(err);
} else {
console.log(recs);
}
});
},
two: function(){
Country.aggregate([
{
$match: {
$and: [
{name: { $in: ["USA", "China", "India", "France", "Japan"]}},
{year: 2017}
]
}
},
{
$sort: {
"nominalGDP": -1
}
},
{
$project: {
_id: 0,
name: 1,
'y' : '$nominalGDP'
}
}
], function(err, recs){
if(err){
console.log(err);
} else {
console.log(recs);
}
});
}
}, function(err, results){
res.render('random', { title: 'Test', data: results.one, pie: results.two });
});
所以我有两个聚合函数,每个函数都会产生它们的结果。这两个函数正在正确打印它们的结果,但没有数据被渲染到我的视图(随机)。
【问题讨论】:
-
您期望
results.one和results.two会是什么?这两个函数都没有返回任何内容,那么,您如何期望结果在function(err, results)中可用? -
将
one: function(){更改为one: function(callback){... 而不是function(err, recs){ .... }替换为callback... 重复two -
哦,我明白了。好吧,只需像 h1b9b 和 Jaromanda X 所说的那样添加“回调”就可以了,非常感谢
标签: javascript node.js mongodb aggregation-framework async.js