결과 정렬
개요
읽기 작업에서 문서를 반환하는 순서를 변경하려면 sort
를 사용합니다. Sort
명령은 MongoDB에 반환된 문서를 하나 이상의 필드 값에 따라 특정 방향으로 정렬하도록 지시합니다. 반환된 문서를 필드별로 오름차순(낮은 항목부터)으로 정렬하려면 1
값을 사용하세요. 대신 내림차순(큰 항목부터)으로 정렬하려면 -1
을 사용합니다. 정렬을 지정하지 않으면 MongoDB는 쿼리 결과의 순서를 보장하지 않습니다.
샘플 문서
아래 예시의 지침에 따라 myDB.books
컬렉션에 데이터를 삽입하고 쿼리 결과에 대해 정렬을 수행합니다. 책을 설명하는 문서가 포함된 컬렉션을 가정해 봅니다. 이 데이터를 컬렉션에 삽입하려면 다음 작업을 실행하세요.
const myDB = client.db("myDB"); const myColl = myDB.collection("books"); await myColl.insertMany([ { "_id": 1, "name": "The Brothers Karamazov", "author": "Dostoyevsky", "length": 824 }, { "_id": 2, "name": "Les Misérables", "author": "Hugo", "length": 1462 }, { "_id": 3, "name": "Atlas Shrugged", "author": "Rand", "length": 1088 }, { "_id": 4, "name": "Infinite Jest", "author": "Wallace", "length": 1104 }, { "_id": 5, "name": "Cryptonomicon", "author": "Stephenson", "length": 918 }, { "_id": 6, "name": "A Dance with Dragons", "author": "Martin", "length": 1104 }, ]);
참고
쿼리 작업은 일치하는 문서가 포함된 커서 에 대한 참조를 반환할 수 있습니다. 커서 에 저장된 데이터를 검사하는 방법을 학습 보려면 커서 기본 사항 페이지를 참조하세요.
예시
다음 정렬 문서를 읽기 작업에 전달하여 길이가 긴 책을 길이가 짧은 책보다 먼저 반환합니다.
// define an empty query document const query = {}; // sort in descending (-1) order by length const sort = { length: -1 }; const cursor = myColl.find(query).sort(sort); for await (const doc of cursor) { console.dir(doc); }
이 경우 숫자 -1
은 읽기 작업에 책을 길이에 따라 내림차순으로 정렬하도록 지시합니다. 이 정렬을 빈 쿼리와 함께 사용하면 find()
는 다음과 같은 문서를 반환합니다:
{ "_id": 2, "title": "Les Misérables", "author": "Hugo", "length": 1462 } { "_id": 4, "title": "Infinite Jest", "author": "Wallace", "length": 1104 } { "_id": 6, "title": "A Dance with Dragons", "author": "Martin", "length": 1104 } { "_id": 3, "title": "Atlas Shrugged", "author": "Rand", "length": 1088 } { "_id": 5, "title": "Cryptonomicon", "author": "Stephenson", "length": 918 } { "_id": 1, "title": "The Brothers Karamazov", "author": "Dostoyevsky", "length": 824 }
지정된 정렬을 사용하면 두 개 이상의 문서 순서가 모호해지는 경우가 있습니다. 위의 경우 '드래곤관의 춤(A Dance with Dragons)'과 '끝없는 농담(Infinite Jest)' 모두 1104
페이지이므로 반환되는 순서는 보장되지 않습니다. 반복 가능한 방식으로 정렬된 결과의 동점을 해결하려면 정렬 문서에 필드를 추가합니다.
// define an empty query document const query = {}; // sort in ascending (1) order by length const sort = { length: 1, author: 1 }; const cursor = myColl.find(query).sort(sort); for await (const doc of cursor) { console.dir(doc); }
정렬 문서에 author
필드를 추가하면 읽기 작업에서 일치하는 문서를 먼저 length
순으로 정렬하고, 타이가 발생한 경우 author
순으로 정렬합니다. 일치하는 문서 필드는 정렬 문서에 지정된 필드와 동일한 순서로 비교됩니다. find()
는 쿼리와 일치하는 문서에 이 정렬을 사용할 경우 다음과 같은 문서 순서를 반환하며, 길이가 같은 두 권의 책에 대해 'Martin'을 'Wallace'보다 먼저 정렬합니다:
{ "_id": 1, "title": "The Brothers Karamazov", "author": "Dostoyevsky", "length": 824 } { "_id": 5, "title": "Cryptonomicon", "author": "Stephenson", "length": 918 } { "_id": 3, "title": "Atlas Shrugged", "author": "Rand", "length": 1088 } { "_id": 6, "title": "A Dance with Dragons", "author": "Martin", "length": 1104 } { "_id": 4, "title": "Infinite Jest", "author": "Wallace", "length": 1104 } { "_id": 2, "title": "Les Misérables", "author": "Hugo", "length": 1462 }