我現在想用last_id的方法去實現滾動分頁,但出現了一些問題
数据的原始数据是: B、C、E、D 现在需要按name排序,每页3条,那么取出的数据就是: E、D、C 那么滚动到第二页的时候,根据last_id,也就是C的_id,取出的就是E、D,这样顺序就乱了
請問有辦法解決嗎,謝謝
你這裡說的last_id不要把它定义成一定是_id。它的原理是找到排序字段的最后一位,下一页从那一个开始。所以既然是根据name排序,那你的last_id其实就应该是C的name,下次查
last_id
_id
name
{name: {$gt: c.name}}
但是這種分頁方法有一個問題,要求排序的欄位必須唯一,否則可能會跳過一些文件。例如如果c.name = b.name,那么上面的查询显然会把b这条记录跳过。所以如果排序的字段不唯一,应该要加上一个第二排序字段,比如_id:
c.name = b.name
{name: 1, _id: 1}
相應的過濾條件應該改為:
{name: {$gte: c.name}, _id: {$gt: c._id}}
你這裡說的
last_id
不要把它定义成一定是_id
。它的原理是找到排序字段的最后一位,下一页从那一个开始。所以既然是根据name
排序,那你的last_id
其实就应该是C的name
,下次查但是這種分頁方法有一個問題,要求排序的欄位必須唯一,否則可能會跳過一些文件。例如如果
c.name = b.name
,那么上面的查询显然会把b这条记录跳过。所以如果排序的字段不唯一,应该要加上一个第二排序字段,比如_id
:相應的過濾條件應該改為: