您好我需要进行多个聚合查询,并将结果呈现给视图。我现在的问题是弄清楚如何在渲染之前确保所有查询完成,并且我已经遇到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 });
});
所以我有两个聚合函数,每个函数都产生它们的结果。这两个函数正确打印结果,但没有数据呈现给我的视图(随机)。
答案 0 :(得分:1)
任务以callback
函数作为参数
所以从任务返回数据,应该看起来像
task: function(callback) {
...
callback(null, result);
}
在这种情况下,您可以使用callback
作为Country.aggregate
的第二个参数
答案 1 :(得分:0)
Parllel需要一个回调函数,以确保函数完全执行,现在是时候返回。
即使回调也需要2个参数, 1. Err(如果成功则会失效) 2.数据(需要成功发送)
var async = require('async');
async.parallel({
one: function(cb){
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){
cb(err);
} else {
cb (null , recs);
}
});
},
two: function(cb){
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){
cb(err);
} else {
cb(null, recs);
}
});
}
}, function(err, results){
res.render('random', { title: 'Test', data: results.one, pie: results.two });
});
您可以阅读更多详细信息 https://github.com/caolan/async/blob/v1.5.2/README.md#parallel