source

결과를 제한하기 전에 Mongo에게 컬렉션을 정렬하라고 어떻게 말합니까?

ittop 2023. 5. 22. 21:40
반응형

결과를 제한하기 전에 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

반응형