我現在已經通過 shell、Studio 3T IDE 和我的 API 本身對此進行了測驗。
第一個查詢如下所示:
Notification.find({
userId: ObjectId("...")
}).limit(20).sort('-createdAt')
它回傳以下按createdAt時間戳排序的檔案(也嵌入在_id欄位中):

然后我運行下一個查詢,我希望它從以下位置開始回傳結果_id: ObjectId("615869eac849ec00205aa112"):
Notification.find({
userId: ObjectId("..."),
_id: { $lt: ObjectId("615869eac849ec00205aa115"}
}).limit(20).sort('-createdAt')
我希望這個命令能讓我接下來的 20 個結果按照與上面原始查詢相同的降序排序。但是,我得到以下資訊:

其中有來自原始查詢的 3 個結果。該欄位在我用作游標和錯誤回傳的結果_id之間顯然是唯一的,但經過檢查,時間戳與我用于范圍查詢的檔案的時間戳完全相同。_idcreatedAtcreatedAt_id
uj5u.com熱心網友回復:
問題是您正在查詢一個未排序的欄位,期望該值識別結果集的特定點。
請注意,在第一個結果集中,條目 17 到 29 在 _id 值中都具有相同的紀元時間戳,并且這 13 個條目沒有任何特定的順序。
幸運的是,條目 20 具有該組中最大的 _id,因此所有其他 12 個都較小,即使是之前發生的那些。
要完成這項作業,還要對 _id 進行排序,例如:
.sort({createdAt: -1, _id: -1})
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/414144.html
標籤:
