前言
私活还是那个私活,功能还是那么嗯嗯啊啊,功能要求获取用户到站点的距离,本来想用腾讯地图的api,今天一看小程序云开发文档,云数据库聚合aggregate中有一个geoNear的方法,可以返回两点间距离。这不是就解决了嘛~事情当然不会那么简单......要是这么简单我还写什么(我还怎么水文章啊)
aggregate.geoNear()官方解释
主要看distanceField这个参数,这不就是咱们需要的距离吗,ok直接把官方代码搬过来改改就用吧,CV大法好!
具体实现
let {list} = await db.collection('your_collection_name').aggregate()
.geoNear({
distanceField: 'distance',// 距离的字段名,最后计算出的距离会放在这个字段中,单位米
spherical: true,
query: { // 筛选,同where和aggregate.match写法
status: 1,
station_name: db.RegExp({ // 相当于like,模糊查询
regexp: '.*' + event.data.search || '' + '.*',
options: 'i',
}),
},
near: db.Geo.Point(event.data.longitude, event.data.latitude) // 经纬度
})
.skip((now - 1) * size) // 翻页
.limit(size)
.end()
接下来保存,打开云函数本地调试看看效果....邦!
这就毫不犹豫的报了个错, 经过各种百度,看官方文档都没找到具体原因,我都开始跟小姐姐说自己跳坑里出不来了,最后的最后看到了一位大神说要创建索引,经过一通折腾竟然成功了...小姐姐夸我真棒!咳咳,具体方法如下:
- 打开云开发控制台,选择数据库
- 选中你的集合,点击索引管理
- 添加索引,填写索引名称和索引字段,选择为地理位置
- 保存,刷新,搞定
碎碎念
你他喵的腾讯怎么就不知道好好写文档呢!!官方文档上什么时候说要写索引了,无话可说,靠
搬砖去了