MongoDB 집계에서 $replaceRoot를 사용합니다. $replaceRoot는 입력 문서를 지정된 문서로 바꿉니다. 이 작업은 _id 필드를 포함하여 입력 문서의 모든 기존 필드를 대체합니다. 문서로 컬렉션을 만들자 −
> db.demo733.insertOne( ... { ... "SubjectDetails": ... [ ... { ... SubjectName:"MongoDB", ... "Marks":85 ... }, ... { ... SubjectName:"MySQL", ... "Marks":90 ... }, ... { ... SubjectName:"PL/SQL", ... "Marks":98 ... } ... ] ... } ... ); { "acknowledged" : true, "insertedId" : ObjectId("5eac6e6156e85a39df5f6342") }
find() 메서드를 사용하여 컬렉션의 모든 문서 표시 -
> db.demo733.find();
이것은 다음과 같은 출력을 생성합니다 -
{ "_id" : ObjectId("5eac6e6156e85a39df5f6342"), "SubjectDetails" : [ { "SubjectName" : "MongoDB", "Marks" : 85 }, { "SubjectName" : "MySQL", "Marks" : 90 }, { "SubjectName" : "PL/SQL", "Marks" : 98 } ] }
다음은 포함된 문서 배열을 상위로 이동하고 집계 파이프라인을 사용하여 키/값을 변경하는 쿼리입니다. -
> db.demo733.aggregate([ ... { ... $replaceRoot: { ... newRoot: { ... $mergeObjects: [ .. . { _id: "$_id" }, ... { $arrayToObject: { $map: { input: "$SubjectDetails", in: [ "$$this.SubjectName", "$$this.Marks" ] } } } ... ] ... } ... } ... } ... ]).pretty()
이것은 다음과 같은 출력을 생성합니다 -
{ "_id" : ObjectId("5eac6e6156e85a39df5f6342"), "MongoDB" : 85, "MySQL" : 90, "PL/SQL" : 98 }