收藏
回答

云开发控制台中查询云数据库时同时使用在match中使用_.geoNear报错

框架类型 问题类型 终端类型 AppID 环境ID 基础库版本
小程序 Bug 工具 wx96d3d35013316631 jinybtest-6gwc9kzz2c21b1af 2.14.1

云数据库查询语句如下:

db.collection('users').aggregate()

.unwind('$contacts')

.match({

'contacts.location': _.geoNear({

geometry: db.Geo.Point(113.323809, 23.097732),

minDistance: 1000,

maxDistance: 5000,

}),

_id: '1234567'

})

.end()

报错 信息如下:

Error: FailedOperation, (BadValue) $geoNear, $near, and $nearSphere are not allowed in this context

回答关注问题邀请回答
收藏

1 个回答

  • 跨商通
    跨商通
    2021-04-20

    geoNear 必须为第一个聚合阶段


    2021-04-20
    有用
    回复 5
    • 钱江有源
      钱江有源
      发表于移动端
      2021-04-20
      放在第一个聚会阶段的话,那怎么实现contacts字段只取符合条件的记录呢
      2021-04-20
      回复
    • 跨商通
      跨商通
      2021-04-21回复钱江有源
      你还是先学深一点云开发吧,看你的代码,错误挺多。_.geoNear是错的;match里用geoNear是错的,再加上阶段顺序是错的,。。。
      2021-04-21
      回复
    • 跨商通
      跨商通
      2021-04-21回复钱江有源
      感觉你可能要改改表结构。否则,你只能以contacts数组中的第x条的location来geoNear。按geoNear文档示例代码里,改成:distanceField:"contacts.0.location"试试
      2021-04-21
      回复
    • 钱江有源
      钱江有源
      2021-04-21回复跨商通
      嗯,我的需求是这样的,比如张三这个用户有5个地理位置各不相同的地址,然后我希望能够根据张三目前所在的位置,找到一个距离他目前最近的一个地址作为默认地址提供给业务端使用,所以不能用“distanceField:contacts.0.location
      2021-04-21
      回复
    • 跨商通
      跨商通
      2021-04-21回复钱江有源
      本人表示只会的办法是,将张三的contacts取出来,再硬计算每条的距离。
      2021-04-21
      回复
登录 后发表内容