节点聚合从数组中选择子文档字段

时间:2018-06-08 10:36:48

标签: mongodb aggregation-framework mean-stack

我有一个由时间戳字段选择的文档。在该文档中是一个具有ID值的数组。我想首先过滤日期范围内的时间戳字段,然后使用正确的ID过滤数组中的子文档。

我正在使用MEAN堆栈并且有一个带url参数的路由:start和.demo_id:

我的聚合查询如下:

exports.getProdukt_start_demo_id = function(req,res) {
    console.log(req.params.start),
    console.log(req.params.demo_id),
    //db.produkts.aggregate({$match:{"von":{$gte: ISODate("2018-06-07T15:17:04")}}}).pretty()
    Produkt.aggregate([
        {
            '$match' : { 'von' : { '$gte' : new Date(req.params.start)} }
        },      
        {
            $addFields: {
                "DemonstratorWerte": {
                    $filter: {
                        input: "$DemonstratorWerte",
                        as: "doc",
                        cond: { //$eq: ["$$doc.Demonstrator", req.params.demo_id ] }
                            $and: [
                                { $gte: [ "$$doc.Demonstrator", req.params.demo_id ] },
                                { $lte: [ "$$doc.Demonstrator", req.params.demo_id ] }
                            ]
                        }
                    }

             }
        }
    }

        ]).exec(function(err, prod) {
            if (err) {
                    console.log(err);
                }

            else {
                console.log(prod)
                console.log(prod.values)
                console.log(typeof prod)
                for (let doc of prod) {
                    console.log(doc["von"]);
                    console.log(doc["DemonstratorWerte"]["Demonstrator"])
                }
                res.json(prod);
            }
        })//.then((res) => res.json())
    }

作为响应对象,我根据“von”时间戳获得正确选择的文档。但是按数组Subdocument ID过滤会在响应中返回一个空数组“DemonstratorWerte”:[]:

[{"_id":4,"Name":"MProdukt","Beschreibung":"Nutzen Sie diese Produkt","von":"2018-06-07T14:17:03.391Z","bis":"2018-06-14T14:17:03.391Z","Erstellungszeitpunkt":"2018-06-14T14:17:03.391Z","DemonstratorWerte":[],"ProduktStorniertGesamt":{"Timestamp":"2018-06-07T01:41:20.391Z","Status":true}]

0 个答案:

没有答案