MongoDB 根据文档中的字段使用地理查询查找文档

MongoDB find documents using geo query depending on fields inside document

以下是 MongoDB 文档的示例:

{
  radius: 5000,
  location: {
    type: 'Point',
    coordinates: [60.1241, 12.12454351] // [long, lat]
  }
}

现在我希望能够 query/find 给定点 p = [long, lat] 落在圆心 location.coordinates 和半径 [=15= 的圆给出的半径内的所有文档].

我想到的最好的是这个

find({
  "location": {
    $geoWithin: {
      $centerSphere: [p, 5000],
    },
  },
});

但我不知道如何让半径不被硬编码而是来自文档字段。

我发现了一个类似的问题,并根据该问题创建了一个可行的解决方案。 ()

您必须先添加 2dsphere 的索引。 (https://docs.mongodb.com/manual/core/2dsphere/)

然后使用以下聚合:

aggregate([
  {
    $geoNear: {
      near: {
        type: "Point",
        coordinates: [60.1241, 12.12454351],
      },
      distanceField: "distance",
      maxDistance: 40000, // optional (can be set if you know the max radius)
    },
  },
  {
    $redact: {
      $cond: {
        if: { $lte: ["$distance", "$radius"] },
        then: "$$KEEP",
        else: "$$PRUNE",
      },
    },
  },
]);

您首先计算并添加一个新字段distance。然后你只保留与半径有一定距离的文件。