$unwind와 함께 집계()를 사용하여 깊은 하위 목록을 연결합니다. 문서로 컬렉션을 만들자 −
> db.demo70.insertOne( ... { ... ... "first" : [ ... { ... "details" : { ... "second" : [ ... { ... "StudentDetails" : { ... "Score" : 10 ... } ... }, ... { ... "StudentDetails" : { ... "Score" : 20 ... } ... }, ... { ... "StudentDetails" : { ... "Score" : 30 ... } ... } ... ] ... } ... }, ... { ... "details" : { ... "second" : [ ... { ... "StudentDetails" : { ... "Score" : 11 ... } ... }, ... { ... "StudentDetails" : { ... "Score" : 18 ... } ... }, ... { ... "StudentDetails" : { ... "Score" : 29 ... } ... } ... ] ... } ... } ... ] ... } ... ); { "acknowledged" : true, "insertedId" : ObjectId("5e29ad4d0912fae76b13d76d") }
find() 메서드를 사용하여 컬렉션의 모든 문서 표시 -
> db.demo70.find().pretty();
이것은 다음과 같은 출력을 생성합니다 -
{ "_id" : ObjectId("5e29ad4d0912fae76b13d76d"), "first" : [ { "details" : { "second" : [ { "StudentDetails" : { "Score" : 10 } }, { "StudentDetails" : { "Score" : 20 } }, { "StudentDetails" : { "Score" : 30 } } ] } }, { "details" : { "second" : [ { "StudentDetails" : { "Score" : 11 } }, { "StudentDetails" : { "Score" : 18 } }, { "StudentDetails" : { "Score" : 29 } } ] } } ] }
다음은 깊은 하위 목록을 연결하는 쿼리입니다 -
> db.demo70.aggregate([ ... { $unwind: "$first" }, ... { $unwind: "$first.details.second" }, ... { $sort: { "first.details.second.StudentDetails.Score": -1 } }, ... { $limit: 3 }, ... { $replaceRoot: { newRoot: "$first.details.second.StudentDetails" } }, ... { $sort: { "Score": 1 } } ... ]);
이것은 다음과 같은 출력을 생성합니다 -
{ "Score" : 20 } { "Score" : 29 } { "Score" : 30 }