반응형
결과를 제한하기 전에 Mongo에게 컬렉션을 정렬하라고 어떻게 말합니까?
컬렉션에서 가장 최근의 문서를 선택합니다.이 질문 mongodb의 답: 마지막 N개의 레코드를 얻는 방법은 무엇입니까?쿼리의 작업 순서가 중요함을 나타냅니다.그러나 이것은 사실이 아닌 것 같습니다(아마 Mongo 2.4가 출시된 이후).아래의 쿼리를 모두 시도해보니 Mongo가 먼저 제한을 적용한 후 정렬을 수행하는 것 같습니다.
쿼리 1
myCollection.find().sort( { '$date': 1 }).limit(50, callback);
쿼리 2
myCollection.find().limit(50).sort( { '$date': 1 }, callback);
mongo에게 먼저 정렬하고 두 번째를 제한하라고 말하는 올바른 쿼리는 무엇입니까?
편집 --- 컬렉션의 샘플 문서입니다.
{
_id: ObjectId("517eb0dddbab79c74700005d"),
audioFiles: [
{
audioFileName: "C64FEFA8-DD43-40A1-8996-35948F3438BF-6896-0000027BD4A59D91",
audioLanguage: "English",
date: ISODate("2013-05-21T16:23:04.006Z"),
flag: "1",
user: "36C4DEB6-C13D-4211-94B5-CC4DD993ECF1-6896-00000278FA7B08EC"
},
{
audioFileName: "994B6DF6-73B5-458F-912A-FF67A84534B2-23532-0000020000000000",
audioLanguage: "English",
date: ISODate("2013-05-27T10:45:04.107Z"),
flag: "1",
user: "9D7BB3F4-371B-4F2A-8DA2-0C4CE8B4E16D-974-0000000000000000"
}
],
date: ISODate("2013-04-29T17:41:49.101Z"),
imageFileName: "SteamLokomotive0498",
random: 0.6750695831142366,
thumbFileName: "SteamLokomotive0498_150x150",
user: "62923D8E-00CE-4F0C-AECA-3010D78FC9CE-226-0000000000000000",
userLanguagePref: "Cantonese"
}
문제는 당신이 그것을 분류할 필요가 있다는 것입니다.date
대신에$date
.
myCollection.find().sort({date: 1}).limit(50, callback);
Mongo는 호출하는 순서에 관계없이 결과를 제한하기 전에 정렬을 적용합니다.sort
그리고.limit
커서 위에
증빙 서류: 링크
db.bios.find().sort( { name: 1 } ).limit( 5 ) db.bios.find().limit( 5 ).sort( { name: 1 } )
두 문은 동일합니다. 즉, 한계() 메서드와 정렬() 메서드를 연결하는 순서는 유의하지 않습니다.두 문 모두 '이름'의 오름차순 정렬 순서에 따라 결정된 처음 5개의 문서를 반환합니다.
사용하는 데 문제가 있었습니다.limit
$를 제거해야 했습니다.
MyCollection.find({ "exampleQuery._id": "exampleId123xx }, { $sort: { requestDate: -1 }, limit: 3 });
언급URL : https://stackoverflow.com/questions/17509025/how-do-you-tell-mongo-to-sort-a-collection-before-limiting-the-results
반응형
'source' 카테고리의 다른 글
WPF: 창이 포커스를 잃었을 때 탐지 (0) | 2023.05.22 |
---|---|
구성 요소에 URI로 식별되는 리소스가 없습니다. (0) | 2023.05.22 |
스팸으로 거부되는 그리드 전자 메일 보내기 (0) | 2023.05.22 |
$빈 배열 찾기 (0) | 2023.05.22 |
Meteor - collection.find()는 항상 모든 필드를 반환합니다. (0) | 2023.05.22 |