今天为大家分享一个最近在工作中遇到的bug,现象就是:app在下拉翻页的时候,页面出现重复的数据(比如之前出现在第一页的数据,最后在第二页中又出现了)。
经过分析之后,原因是什么呢?
一般的接口,都支持传pagesize和pageindex字段,分别对应每一页返回的记录数以及返回第几页的数据,然后有的接口做的灵活一点,还可以在入参中传排序字段,在翻页的时候,可以指定字段排序后再返回某一页的数据。
出现重复数据,我目前遇到过的有以下两个场景导致:
1、列表数据是实时变化的,可能上一秒这条数据出现在第一页,但是下一秒你翻页的时候,数据库里面加入了新的数据,导致之前的数据会挤到了第2页了。
2、数据库里面,按照某一列排序的时候,如果值相同,那么每次排的顺序可能不一致。当然,不一定所有数据库都有这种情况,但至少我们现在用的mongo有这个问题。
那既然发现了这个问题,怎么去解决呢?
对于第一种场景的话,我个人认为暂时也可以不优化,主要处理下第二种,在传参中指定某个字段排序后,代码中默认再加上mongo里面的"_id"字段去进行排序,因为这个字段的值是唯一的,这样的话可以避免这个问题。