首页 > 解决方案 > 使用另一个文档的坐标进行附近查询

问题描述

我的收藏模型如下所示:

{
  "_id": 1234,
  "geometry": {
    "type": "Point",
    "coordinates": [3.6023, 51.00437]
  }
}

我想以最大距离获取特定文档附近的所有文档。按照上面的示例,查询将使用 id 1234 来获取其附近的文档,在同一个集合内。

我尝试以多种方式进行此查询,我认为更接近的是使用此聚合管道:

[
  {$match: {_id: 1234}},
  {
    $lookup: {
      from: "my_collection",
      let: {coordinates: "$geometry.coordinates"},
      pipeline: [
        {
          $geoNear: {
            key: "geometry",
            near: "$$coordinates",
            distanceField: "distance",
            spherical: true,
            maxDistance: 5000
          }
        }
      ],
      "as": "nearby_documents"
    }
  }
]

但是对于我尝试过的所有事情,我总是得到同样的错误:“$geoNear 需要一个 'near' 选项作为数组”。

另一种方法是首先进行查询以获取 id 为 1234 的文档的坐标:

[{$match: {_id: 1234}}]

然后使用结果进行另一个查询以获取附近的文档:

[{$geoNear: {key: "geometry", near: [3.6023, 51.00437], distanceField: "distance", spherical: true}}]

有没有办法在一个查询中做到这一点?

标签: mongodb

解决方案


推荐阅读