当查询字段为objectId时,geoNear聚合是不是不起作用?

Posted

技术标签:

【中文标题】当查询字段为objectId时,geoNear聚合是不是不起作用?【英文标题】:Does geoNear aggregation not work when the query field is the objectId?当查询字段为objectId时,geoNear聚合是否不起作用? 【发布时间】:2021-06-20 12:59:48 【问题描述】:

我的 geonear 代码可以正常工作,除非我输入查询:id: req.params.id。它适用于我放置的任何其他过滤器对象。

有谁知道在使用 geoNear 时如何使用 objectId 查询某个文档?

我目前有以下内容。是否还有任何方法可以首先对文档进行匹配,即$match:id:req.params.id。我试过这样做,但由于 $geoNear 必须是管道中的第一步,它没有成功。

const distances = await User.aggregate([
      
        $geoNear: 
          near: 
            type: "Point",
            coordinates: [lng, lat],
          ,
          //   maxDistance: 13.3333 * 1000,
          spherical: true,
          distanceField: "distance",
          distanceMultiplier: 0.001,
          query:  _id: req.params.id ,
        ,
      ,
       $project:  id: 1, distance: 1  ,
    ]);

【问题讨论】:

【参考方案1】:

unable to use $match operator for mongodb/mongoose aggregation with ObjectId ^ 已修复,抱歉!

【讨论】:

以上是关于当查询字段为objectId时,geoNear聚合是不是不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL和MongoDB` $ geoNear`聚合

MongoDB 查询聚合 localField ObjectId 字符串和外部字段 ObjectId

使用 geonear 的 Mongoose 聚合

使用 2d 索引,与 $geoNear 聚合

添加附加查询时,Doctrine MongoDB geoNear() 参数设置为 0

MongoDB GeoNear 聚合