하위 문서 일치별로 정렬하려면 집계 프레임워크를 사용할 수 있습니다. 먼저 문서로 컬렉션을 생성해 보겠습니다. −
> db.sortBySubDocumentsDemo.insertOne( { "StudentName": "Chris", "StudentDetails": [ { "Age":21, "StudentScore":91 }, { "Age":22, "StudentScore":99 }, { "Age":21, "StudentScore":93 } ] } ); { "acknowledged" : true, "insertedId" : ObjectId("5cd57e297924bb85b3f48942") } > db.sortBySubDocumentsDemo.insertOne( { "StudentName": "Robert", "StudentDetails": [ { "Age":24, "StudentScore":78 }, { "Age":21, "StudentScore":86 }, { "Age":23, "StudentScore":45 } ] } ); { "acknowledged" : true, "insertedId" : ObjectId("5cd57e4c7924bb85b3f48943") }
다음은 find() 메서드를 사용하여 컬렉션의 모든 문서를 표시하는 쿼리입니다. -
> db.sortBySubDocumentsDemo.find().pretty();
이것은 다음과 같은 출력을 생성합니다 -
{ "_id" : ObjectId("5cd57e297924bb85b3f48942"), "StudentName" : "Chris", "StudentDetails" : [ { "Age" : 21, "StudentScore" : 91 }, { "Age" : 22, "StudentScore" : 99 }, { "Age" : 21, "StudentScore" : 93 } ] } { "_id" : ObjectId("5cd57e4c7924bb85b3f48943"), "StudentName" : "Robert", "StudentDetails" : [ { "Age" : 24, "StudentScore" : 78 }, { "Age" : 21, "StudentScore" : 86 }, { "Age" : 23, "StudentScore" : 45 } ] }
다음은 하위 문서 일치를 기준으로 정렬하는 쿼리입니다. 여기서는 StudentScore를 기준으로 정렬합니다 -
> db.sortBySubDocumentsDemo.aggregate([ {$match: { 'StudentDetails.Age': 21 }}, {$unwind: '$StudentDetails'}, {$match: {'StudentDetails.Age': 21}}, {$project: {_id: 0, "StudentName": 1, 'StudentDetails.StudentScore': 1}}, {$sort: { 'StudentDetails.StudentScore': 1 }}, {$limit: 5} ]);
이것은 다음과 같은 출력을 생성합니다 -
{ "StudentName" : "Robert", "StudentDetails" : { "StudentScore" : 86 } } { "StudentName" : "Chris", "StudentDetails" : { "StudentScore" : 91 } } { "StudentName" : "Chris", "StudentDetails" : { "StudentScore" : 93 } }