问答

社交app上使用mongodb分页查询,实时数据如何去重?

作者:admin 2021-07-28 我要评论

社交app上,使用mongodb进行地理位置检索,用户的经纬度和在线状态是会改变的,分页查询出来的数据在app端显示,后几页可能会有前一页的会员数据,原因是因为会...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

社交app上,使用mongodb进行地理位置检索,用户的经纬度和在线状态是会改变的,分页查询出来的数据在app端显示,后几页可能会有前一页的会员数据,原因是因为会员的经纬度或者在线状态的更改导致原本数据的位置发生改变,导致分页获取到的下一页数据可能在上一页也存在。请问下有什么办法可以解决这个问题。根据一个唯一的字段排序时行不通的,例如创建日期等等,因为根据这个唯一的字段排序时是不符合需求的。我们的需求时必须按照距离升序排序。欢迎业界大佬帮小弟解答一下。

###

这个问题我觉得应该主要是因为动态的数据导致分页出来的数据可能重复,关键在于这个动态,所以我能想到的方式大概就是,把动态的看成静态的数据,这样就不会重复

具体操作就是第一次分页查询之后,前端再做后续查询都需要带一个此次分页查数据的最后一个数据的距离字段(因为是升序,那也就是这一页里距离最大的值)作为参数传到后端,那依此参数的分页查询只查询在这个距离之后的数据的第一页即可,这样可以保证就算动态数据也不会影响之后的查询,因为有一个距离参数限制

当然这样的改动就意味着这种分页查询不再是传统的分页查询了,除了第一次是传统的分页查询,后续的分页查询其实只是查了大于距离参数的数据的第一页,永远都是第一页

不知道这样可不可以解决你的问题哈。当然我自己没有遇到过这样的业务问题,也只是纯思考,仅供参考,希望能所有帮助(??????)??


至于评论里提到的这个问题
image.png

既然题主已经接受了这种不一样的分页处理,那这个问题也就很好解决了啊,因为这个不一样的分页是靠

筛选+排序+只取第一页

做到的,那现在你说出现了有些同样距离的取不到的问题,那是因为现在的筛选条件是大于距离参数

改一下筛选即可,改为

距离>=距离参数 and id>id参数 order by 距离,id

也就是说,此时传入后端的不只是有最后一个数据的距离字段,还有最后一个数据的id(当然前提是这个id是自增长,亦或者不是id,是其他任何可以体现数据新旧变化唯一的字段即可)

如果没有这样的id字段,那确实就无解了,也不能说无解,只能说要做到有点麻烦

比如前端拿到那页数据后,再取下一页时,要把当前页数据最大的一个距离的数据取出来,但是这个最大距离的数据也许不止一个,所以要把所有该距离的数据的id筛选出来,作为下一页的查询条件,当然还有之前的距离参数也是查询条件,然后后端去过滤掉

这种方式前后端都要改,而且前端改动比较多,但是若有之前说的根据id>id参数的方式的话,那前端只需要再多加一个参数即可,前端不用再多做一次筛选

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 社交app上使用mongodb分页查询,实时数

    社交app上使用mongodb分页查询,实时数

  • idea启动springboot没有自动把yml配置

    idea启动springboot没有自动把yml配置

  • react-router 如何实现点击二级导航时

    react-router 如何实现点击二级导航时

  • 关于类似于快宝之类的地址识别api

    关于类似于快宝之类的地址识别api

腾讯云代理商
海外云服务器