平均堆栈:如何从MongoDB聚合查询访问数据?

平均堆栈:如何从MongoDB聚合查询访问数据?,mongodb,aggregation-framework,mean-stack,Mongodb,Aggregation Framework,Mean Stack,我有一个问题,我的聚合查询没有将任何结果返回到我的res.json()。。。 查询类似于Node/Express中的查询: exports.group_Produkt_by_month = function(req,res) { Produkt.aggregate([ { "$unwind":"$DemonstratorWerte" }, { "

我有一个问题,我的聚合查询没有将任何结果返回到我的res.json()。。。 查询类似于Node/Express中的查询:

exports.group_Produkt_by_month = function(req,res) {
        Produkt.aggregate([
            {
                "$unwind":"$DemonstratorWerte"
            },
            {
                "$group": {
                    "_id": {
                        "DemoID": "$DemonstratorWerte.Demonstrator", "Monat": {"$month":"$Erstellungszeitpunkt"}
                    },
                    "Anzahl":{"$sum":1}
                }
            },
            {
                "$project": {"DemoID": "$_id.DemoID", "Monat": "$_id.Monat", "Anzahl":1, "_id":0}
            },
            {
                "$addFields": { 
                    "Monat": { 
                        "$let":  { 
                            "vars": {  
                                "monthsInStrings": [, "Januar", "Februar", "Maerz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"] 
                            }, 
                            "in": {  
                                "$arrayElemAt": ['$$monthsInStrings','$Monat'] 
                            } 
                        } 
                    } 
                } 
            }
        ]).exec(function(err, prod) {
        if (err) {
                console.log(err);
            }

        else {
            console.log(typeof prod);
            console.log(prod[1])
            console.log(prod);
            res.json(prod);
        }
    }).then((res) => res.json())

    }

当我在MongoShell中执行查询时,查询被正确执行并返回文档列表。现在我想把文档以res.json(docs)或类似的形式返回给我,作为webbrowser中的结果文档数组。。。我该怎么做?我听说必须使用
.toArray()
方法,但我不知道如何在Node/Express中以及在何处执行此操作…

您需要创建rest api,然后执行查询或首先查看文档如何使用Express在Node中获取/插入数据,检查必须编写代码的文件夹/文件结构。您可以连接任何数据库

exports.group_Produkt_by_month = function(req,res) {
       Produkt.aggregate([
            {
                "$unwind":"$DemonstratorWerte"
            },
            {
                "$group": {
                    "_id": {
                        "DemoID": "$DemonstratorWerte.Demonstrator", "Monat": {"$month":"$Erstellungszeitpunkt"}
                    },
                    "Anzahl":{"$sum":1}
                }
            },
            {
                "$project": {"DemoID": "$_id.DemoID", "Monat": "$_id.Monat", "Anzahl":1, "_id":0}
            },
            {
                "$addFields": { 
                    "Monat": { 
                        "$let":  { 
                            "vars": {  
                                "monthsInStrings": [, "Januar", "Februar", "Maerz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"] 
                            }, 
                            "in": {  
                                "$arrayElemAt": ['$$monthsInStrings','$Monat'] 
                            } 
                        } 
                    } 
                } 
            }
        ],function(err,result) {
        if(err) res.sendStatus(404);
         res.send(result);
      });
 }
嗯,
我发现这和我的路线有关我猜。。。它找不到路由,因为它可能不够清晰,所以我添加了更多前缀链接/../。。。然后它就成功了。

我已经创建了完整的REST API,包括路由、模型、app.js等。问题是,我的其他路由和API方法与Produkt模式都很好地工作,我有另一个聚合函数,上面几行,它会返回正确的json响应文档,只使用这个函数,不会返回任何东西,我甚至没有得到一个错误控制台,问题似乎是,它没有进入功能不知何故,但我不知道为什么。。。我在我的函数开始时做了“console.log”(“Entering function…”),但没有任何东西被打印到控制台上。。。有什么想法吗?我的routes函数看起来是这样的:函数ProduktRoutes(router){var ProduktController=require('../controllers/ProduktController')router.route('/Produkt').get(ProduktController.list_all_Produkt).post(ProduktController.create_an_Produkt)router.route('/Produkt/:Produkt_id').get(ProduktController.getProduktbyID).put(ProduktController.updateProdukt).delete(ProduktController.deleteProdukt)router.route('/Produkt/Monat').get(ProduktController.group_Produkt_by_month)}module.exports=ProduktRoutes;在使用get调用API时进行检查,如上所述,作为get或goto network选项卡/邮递员使用适当的方法检查API。