k***@163.com
k***@163.com
  • 发布:2023-07-18 08:41
  • 更新:2023-07-18 15:06
  • 阅读:153

geoNear和orderBy(distance)返回数据有重复

分类:uniCloud

我在前端使用自己编写的jql语句获取数据。
目前所有数据的distance都是0,因为都是模拟获取数据。都在一个地方,距离为0.
下面是前端数据库语句。

let data=db.collection('collection')  
                            .geoNear({  
                                distanceField: 'distance',  
                                spherical: true,  
                                near: new db.Geo.Point(this.user_geo.lng,this.user_geo.lat),   
                                maxDistance: maxDistance  
                            })  
                            .where(queryWhere)  
                            .orderBy('distance asc','_id asc')  
                            .skip(pageIndex*pageSize)  
                            .limit(pageSize)  
                            .getTemp()

以上结果在我第二次获取数据的时候,和第一次的数据重复。但不是全部重复,有几个数据重复,有几个数据是新的。
如果orderBy语句改用_id,就可以获取新数据,不会重复:orderBy('_id asc')
这个问题如何解决?或者是我的距离不是0,返回数据就不会重复吗?

2023-07-18 08:41 负责人:无 分享
已邀请:
DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

orderBy里面加上'_id asc'是正确的用法,具体的原理你可以去搜一下“数据库 分页 重复”

k***@163.com

k***@163.com (作者)

谢谢官方工作人员回答。但是问题还是解决不了。
我的_id已经设置了唯一索引,orderBy使用orderBy('distance asc','_id asc'),但是结果重复。
我不知道怎么可以解决这个问题。请教如何解决?

k***@163.com

k***@163.com (作者)

按道理在_id设置了唯一索引和使用orderBy('distance asc','_id asc')之后,不应该有重复数据才对。
这有什么办法可以消除?

要回复问题请先登录注册