我有相当大的中间件功能,可以从聚合管道中从Mongodb获取一些数据。我要在一个函数中从3个数据库中查询,然后将2个数据库查询中的2个用于我的第三个数据库查询。 (我正在使用猫鼬ODM)。首先,我要从产品和 FP 进行查询,然后尝试将结果保存到 res.locals.variable 。并将它们用于我的第三个查询 Flexpotenzials ...
以某种方式,我无法保存结果并将结果从 res.locals 传递给其他聚合函数...为什么? 我知道这是异步的,并且我对javascript还是很陌生,不确定如何去做...
这是我的3个汇总的样子:
exports.getLeistungStatusCards = function(req, res, next) {
console.log("Funktion: getLeistungStatusCards");
const minID = +req.params.demo_id*1000000;
const maxID = (+req.params.demo_id+1)*1000000;
Produkt.aggregate([
{
$match: {"DemonstratorWerte.Demonstrator": +req.params.demo_id}
},
{
$sort: {"von":-1}
},
{
$limit:1
},
{
$project: {
"PosFuehrungsGroessen": {$arrayElemAt: ["$DemonstratorWerte.posFuehrungsgroessen", -1]},
"NegFuehrungsGroessen": {$arrayElemAt: ["$DemonstratorWerte.negFuehrungsgroessen",-1]}
}
},
{
$project: {
"lastPosFuehrungsGroesse": {$arrayElemAt: ["$PosFuehrungsGroessen",-1]},
"lastNegFuehrungsGroessen": {$arrayElemAt: ["$NegFuehrungsGroessen",-1]}
}
},
{
$project: {
"FuehrungsGroesse": {$subtract: ["$lastPosFuehrungsGroesse.Wert","$lastNegFuehrungsGroessen.Wert"]}
}
}
]).exec(function(err, result) {
if (err) {
console.log(err);
}
else {
res.locals.FG = result;
}
next();
})
FP.aggregate([
{
"$match": {Demonstrator: +req.params.demo_id}
},
{
$sort:{"createdAt":-1}
},
{
$limit:1
},
{
$project: {
"LastDoc": {$arrayElemAt: ["$Fahrplanabschnitte",-1]}
}
},
{
$project: {"LastProgBW": "$LastDoc.PrognostizierterBetriebswert"}
}
]).exec(function(err, result) {
if (err) {
console.log(err);
}
else {
console.log(result);
res.locals.LPBW = result;
}
next();
});
console.log("res.locals.FG:",res.locals.FG);
console.log("Result LPBW:",res.locals.LPBW);
FlexPotenzial.aggregate([
{
$match: {_id: {$lte: minID, $gte: maxID}}
},
{
$sort: {'createdAt':-1}
},
{
$limit: 1
},
{
$project: {
_id:0,
"lastElErzeugungsleistung": {$arrayElemAt: [ "$aktElErzeugungsleistung", -1 ] },
"lastElNachfrageleistung": {$arrayElemAt: [ "$aktElNachfrageleistung", -1 ] },
"thLeistung": {$subtract: ["$aktThErzeugungsleistungWaerme","$aktThNachfrageleistungWaerme"]},
}
},
{
$project: {
"elLeistung": {$subtract: ["$lastElErzeugungsleistung","$lastElNachfrageleistung"]},
"AbwElLeistung":{$subtract: [{$subtract: ["$lastElErzeugungsleistung","$lastElNachfrageleistung"]}, this.lastProgBW]},
"thLeistung":1,
"Fuehrungsgroesse": this.fg
}
}
]).exec(function(err, result) {
if (err) {
console.log(err);
}
else {
res.json(result);
}
})
};