MEAN节点/ Express:如何将mongodb聚合结果传递给其他函数?

时间:2018-07-23 15:10:20

标签: node.js mongodb mongoose aggregation-framework mean-stack

我有相当大的中间件功能,可以从聚合管道中从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);
        }
    })

};

0 个答案:

没有答案