我现在想用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排序,那你的last_id其实就应该是C的name,下次查
last_id
_id
name
{name: {$gt: c.name}}
但是这种分页方法有一个问题,要求排序的字段必须唯一,否则可能会跳过一些文档。比如如果c.name = b.name,那么上面的查询显然会把b这条记录跳过。所以如果排序的字段不唯一,应该要加上一个第二排序字段,比如_idしかし、このページング方法には問題があります。ソートされたフィールドは一意でなければなりません。そうしないと、一部のドキュメントがスキップされる可能性があります。たとえば、c.name = b.name の場合、上記のクエリは明らかに b レコードをスキップします。したがって、並べ替えフィールドが一意でない場合は、_id などの 2 番目の並べ替えフィールドを追加する必要があります:
c.name = b.name
対応するフィルター条件を次のように変更する必要があります:
ここで述べた
last_id
は、_id
として定義しないでください。その原理は、並べ替えられたフィールドの最後の桁を見つけて、次のページがその桁から始まることです。したがって、name
に基づいて並べ替えられているため、last_id
は実際には C のname
である必要があります。次回確認してください。 リーリーlast_id
不要把它定义成一定是_id
。它的原理是找到排序字段的最后一位,下一页从那一个开始。所以既然是根据name
排序,那你的last_id
其实就应该是C的name
,下次查但是这种分页方法有一个问题,要求排序的字段必须唯一,否则可能会跳过一些文档。比如如果
リーリーc.name = b.name
,那么上面的查询显然会把b这条记录跳过。所以如果排序的字段不唯一,应该要加上一个第二排序字段,比如_id
しかし、このページング方法には問題があります。ソートされたフィールドは一意でなければなりません。そうしないと、一部のドキュメントがスキップされる可能性があります。たとえば、c.name = b.name
の場合、上記のクエリは明らかに b レコードをスキップします。したがって、並べ替えフィールドが一意でない場合は、_id
などの 2 番目の並べ替えフィールドを追加する必要があります:対応するフィルター条件を次のように変更する必要があります:
リーリー