数据库中对数据排序后分页,可能查询出重复数据的解决方案

问题复现

本菜鸡在做项目时,使用 MongoDB 数据库时遇到了一个问题,这个问题是这样的:对数据进行排序后并进行分页,发现可能在第一页中查询到的数据,在第二页的查询中会再次出现,第一页跟第二页会查询到一条一摸一样的数据,包括主键,真是见了鬼了!

请教大神

菜鸡苦思冥想了一天,还是想不出个之所以然道理出来,最终没办法,只好去请教大神。

我:为啥呢?
大神:(苦思后)你排序所用的字段,是否能保证唯一性呢?
我:啊这,(看了下代码),不能诶
大神:呵呵
我:。。。。

解决问题

其实,这个问题的根源在于我们排序所用的字段不能确保唯一性,因此,数据库每次排序的结果并不能保证是一样的。举个例子,我们有 A,B,C 三条数据,我们对其做一个排序,这三条数据用于排序的字段的值是相同的,所以,数据库每次对它进行排序之后,得到的结果可能是 A,C,B,也有可能是 A,B,C,这都是说不准的。

当我们对排序后的数据进行分页之后,我们要取第一页的数据(我们假设每一页只取一条数据),数据库进行排序后得到的结果是 A,C,B,显然我们取得了 A;然后我们要取第二页的数据,这次数据库排序之后的数据是 C,A,B,好家伙,这次查询出来的还是 A!这就是我们问题的根源。

解决这个问题也很简单,只需要保证我们排序字段的唯一性即可,至于如何保证,那就见仁见智了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值