我在前端使用自己编写的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,返回数据就不会重复吗?
3 个回复
DCloud_uniCloud_WYQ
orderBy里面加上'_id asc'是正确的用法,具体的原理你可以去搜一下“数据库 分页 重复”
k***@163.com (作者)
谢谢官方工作人员回答。但是问题还是解决不了。
我的_id已经设置了唯一索引,
orderBy
使用orderBy('distance asc','_id asc')
,但是结果重复。我不知道怎么可以解决这个问题。请教如何解决?
DCloud_uniCloud_WYQ
你上面的代码里面db对象是哪来的?代码是写在云函数里面的还是客户端的?
2023-07-18 18:05
k***@163.com (作者)
回复 DCloud_uniCloud_WYQ: 我的代码是写在前端页面的虚拟连表。主表用geoNear。
db在script中定义。const db=uniCloud.database()
2023-07-18 20:12
DCloud_uniCloud_WYQ
回复 k***@163.com: orderBy改成jql的写法 https://uniapp.dcloud.net.cn/uniCloud/jql.html#order-by
2023-07-18 20:20
k***@163.com (作者)
回复 DCloud_uniCloud_WYQ: 谢谢。应该是解决了。
2023-07-18 20:51
k***@163.com (作者)
按道理在
_id
设置了唯一索引和使用orderBy('distance asc','_id asc')之后,不应该有重复数据才对。这有什么办法可以消除?