我有一个由时间戳字段选择的文档。在该文档中是一个具有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}]