I want to filter the report
field, where m_name = "ABC"
, and group it back.
Here’s my sample data:
{
"_id" : ObjectId("63f82b8619e8f81b7009d2c3"),
"type" : "test"
"created_at" : date
"created_by" : "admin",
"report" : [
{
"name" : "Day 3",
"date" : date
"m_name" : "ABC",
"created_by" : "admin",
"created_at" :date
},
{
"name" : "Day 2",
"date" :date,
"created_by" : "admin",
"m_name" : "ABC",
"created_at" : date
},
{
"name" : "test",
"date" : date
"m_name": "123"
"created_by" : "admin",
"created_at" : date,
},
],
... 20 fields
}
Here’s my pipeline:
.aggregate([
{
$unwind: "report",
},
{
$match: {
"report.m_name": "ABC",
},
},
{
$group: {
_id: "$_id",
report: {
$push: "$report",
},
},
},
])
If do like this, output only have _id
and report
, how to return all the rest fields?
I’ve tried the $$ROOT, but it embedded in a object, I want the output like this:
{
"_id" : ObjectId("63f82b8619e8f81b7009d2c3"),
"type" : "test"
"created_at" : date
"created_by" : "admin",
"report" : [
{
"name" : "Day 3",
"date" : date
"m_name" : "ABC",
"created_by" : "admin",
"created_at" :date
},
{
"name" : "Day 2",
"date" :date,
"created_by" : "admin",
"m_name" : "ABC",
"created_at" : date
},
],
... 20 fields
}
I know project
(type: {$first: “$type”},) will do, but there are 20 fields, any other simpler way to do this?