I'm trying to use the $filter operation on a nested array and cannot seem to get it to work right.
Does the $fliter operation work with nested arrays?
This is my MongoDB collection
{
metrics: [
{hits: 4 ,data: [
{"status_Code" : 200, "response_time" : 245 },
{"status_Code" : 200, "response_time" : 343},
{"status_Code" : 501, "response_time" : 345 },
{"status_Code" : 200, "response_time" : 234},
{"status_Code" : 0, "response_time" : -1, },
]
},
{hits: 2 ,data: [
{"status_Code" : 200, "response_time" : 245},
{"status_Code" : 200, "response_time" : 343},
{"status_Code" : 0, "response_time" : -1},
{"status_Code" : 0, "response_time" : -1},
{"status_Code" : 0, "response_time" : -1},
]}
],
}
Aggregate Query:
db.collection.aggregate([
{
$project: {
metrics: {
$filter: {
input: "$metrics.data",
as: "mdata",
cond: {$gt: ["$$mdata.response_time", -1]}
}
}
}
}
]);
Desired Output:
{
metrics: [
{
hits: 4 ,
data: [
{"status_Code" : 200, "response_time" : 245 },
{"status_Code" : 200, "response_time" : 343},
{"status_Code" : 501, "response_time" : 345 },
{"status_Code" : 200, "response_time" : 234},
]
},
{
hits: 2 ,
data: [
{ "status_Code" : 200, "response_time" : 245},
{"status_Code" : 200, "response_time" : 343},
]
}
]
}