Следующий запрос может дать нам ожидаемый результат:
db.collection.aggregate([
{
$group:{
"_id":"$department.deptno",
"department":{
$first:"$department"
},
"employees":{
$push:"$$ROOT"
}
}
},
{
$replaceRoot:{
"newRoot":{
$mergeObjects:[
"$department",
{
"employees":"$employees"
}
]
}
}
},
{
$project:{
"employees.department":0
}
},
{
$out:"department"
}
]).pretty()
Набор данных:
{
"_id" : 7934,
"ename" : "MILLER",
"job" : "CLERK",
"mgr" : "7782",
"hiredate" : ISODate("1982-01-22T18:30:00Z"),
"sal" : 1300,
"department" : {
"deptno" : 10,
"dname" : "ACCOUNTING",
"loc" : "NEW YORK"
}
}
{
"_id" : 7935,
"ename" : "MECHANIC",
"job" : "CEO",
"mgr" : "7700",
"hiredate" : ISODate("1982-01-22T18:30:00Z"),
"sal" : 9999999999999,
"department" : {
"deptno" : 10,
"dname" : "ACCOUNTING",
"loc" : "NEW YORK"
}
}
Коллекция: отдел
{
"deptno" : 10,
"dname" : "ACCOUNTING",
"loc" : "NEW YORK",
"employees" : [
{
"_id" : 7934,
"ename" : "MILLER",
"job" : "CLERK",
"mgr" : "7782",
"hiredate" : ISODate("1982-01-22T18:30:00Z"),
"sal" : 1300
},
{
"_id" : 7935,
"ename" : "MECHANIC",
"job" : "CEO",
"mgr" : "7700",
"hiredate" : ISODate("1982-01-22T18:30:00Z"),
"sal" : 9999999999999
}
]
}