如何使用MongoDB文档中的值来查询自身?

63lcw9qa  于 2023-10-16  发布在  Go
关注(0)|答案(1)|浏览(101)

我有以下文件结构的集合:

{
    "_id": "64f10520de562a0007595b56",
    "location": {
      "type": "Point",
      "radius": 62.474601140938596,
      "coordinates": [
        -100.28823650799032,
        25.68087292245721
      ]
    }
  }

所以我想在查询中使用“radius”属性值,像这样:

db.collection.find({
  location: {
    $geoWithin: {
      $centerSphere: [
        [
          -103.83176,
          20.88196
        ],
        10 / "RADIUS_PROPERTY_VALUE" // -> 62.474601140938596
      ]
    }
  }
})

有没有办法做到这一点?
MONGODB PLAYGROUND SCENARIO

u7up0aaq

u7up0aaq1#

mongoplayground上的例子不起作用,因为$geoWithin查询操作符没有将$location.raidus解释为文档的值,而是将其解释为字符串$location.raidus。这就是为什么它一直说query failed: (BadValue) radius must be a non-negative number(不是因为它是负数,而是因为它是一个字符串,所以根本不是一个数字)。
也就是说,你应该尝试使用$geoNear聚合运算符:https://www.mongodb.com/docs/manual/reference/operator/aggregation/geoNear/

db.collection.aggregate([
  {
    "$geoNear": {
      "near": {
        "type": "Point",
        "coordinates": [
          -103.83176,
          20.88196
        ]
      },
      "distanceField": "exactDistance"
    }
  },
  {
    $match: {
      $expr: {
        $lte: [
          "$exactDistance",
          "$location.radius"
        ]
      }
    }
  }
])

它在mongoplayground上不起作用,因为它需要一个2d球体索引,但可能对你的项目起作用。

相关问题