1***@qq.com
1***@qq.com
  • 发布:2021-09-27 17:57
  • 更新:2021-12-27 11:13
  • 阅读:546

为什么geoNear里的maxDistance无效?

分类:uniCloud
var {community, location}=that,  
                            {dynamic}=community,  
                            {longitude, latitude}=location,  
                            maxDistance=data.maxDistance||50000,  
                            geoNear =    {  
                                distanceField: 'distance',  
                                spherical: true,  
                                near: new db.Geo.Point(longitude, latitude),  
                                query: {  
                                    offShelves:_.neq(true)  
                                },  
                                maxDistance  
                            };  
                        console.log(maxDistance)  
                        dynamic.status='loading';  
                        db.collection('xn-user-action').aggregate().geoNear(geoNear).lookup({  
                            from: 'xn-community',  
                            let: {  
                                id: '$communityID',  
                            },  
                            pipeline: $.pipeline().match(_.expr($.eq(['$_id','$$id']))).project({public:1, name:1}).done(),  
                            as: 'community'  
                        }).lookup({  
                            from: 'uni-id-users',  
                            let: {  
                                creator: '$creatorID',  
                            },  
                            pipeline: $.pipeline().match(_.expr($.eq(['$_id','$$creator']))).project({avatar_file:1,nickname:1}).done(),  
                            as: 'creatorID'  
                        }).match({  
                            "community.0.public":_.neq(false)  
                        }).limit(20).end().then(res=>{  
                            let list=res.result.data;  
                            if(list.length<20){  
                                dynamic.status='nomore';  
                            }else{  
                                dynamic.status='loadmore';  
                            };  
                            resolve(list);  
                        }).catch(err=>{  
                            reject(err);  
                        })
2021-09-27 17:57 负责人:无 分享
已邀请:

最佳回复

DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

此问题已在3.3.1版本修复

DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

这段代码写在客户端还是云函数的?传入的maxDistance是多少?列表内的距离是怎么计算出来的?

重庆柔然科技

重庆柔然科技 - 短头发

我也遇到这个问题,在云函数里面写的聚合查询,限制30公里以内,结果是1000公里以外的都查询出来了

async search(data, uid) {  
        const cmd = this.db.command;  
        let {  
            longitude,  
            latitude,  
            type,  
        } = data;  

        let result = await this.collection.aggregate()  
            .geoNear({  
                distanceField: 'juli', // 输出的每个记录中 distance 即是与给定点的距离  
                spherical: true,  
                near: new this.db.Geo.Point(longitude, latitude),  
                maxDistance: 30000, //限制30km  
                minDistance: 0,  
                query: {  
                    isOnline: true,  
                    type: type,  
                },  
                key: 'home_address.location', // 若只有 location 一个地理位置索引的字段,则不需填  
                includeLocs: 'home_address.location', // 若只有 location 一个是地理位置,则不需填  
            })  
            .project({  
                mobile: 0  
            })  
            .skip((data.page - 1) * data.limit)  
            .limit(data.limit)  
            .end()  
        return result.data;  
    }
DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

腾讯那边这个参数的处理确实有问题,我们联系腾讯修复下

  • 1***@qq.com (作者)

    希望修复好后通知一下,,,

    2021-10-05 16:58

  • 1***@qq.com (作者)

    不过我是运行在客户端的,非云函数端,

    2021-10-05 16:58

  • DCloud_uniCloud_WYQ

    回复 1***@qq.com: 云端和客户端是一样的

    2021-10-08 10:19

c***@163.com

c***@163.com

诶~也遇到这个问题,看到这里说明之前被浪费了大把时间。

该问题目前已经被锁定, 无法添加新回复