0

我正在使用 MongoDB 设计出租车预订服务。我的架构看起来像 -

{
    "_id": {
        "$oid": "621ca96e2c7e7efcfba6ce34"
    },
    "registration_id": "Id1",
    "location": [{
        "$numberDouble": "13.197827893722762"
    }, {
        "$numberDouble": "77.70575957707639"
    }]
}

其中 location 是 Point GeoJson 数据类型。

根据客户的位置,当他提出要求时,我必须提供最近的出租车。我正在使用 $near 查询。

query = {"location": { "$near": { "$geometry": { "type": "Point", "coordinates": [event['longitude'], event['latitude']] }}}}

但是,我只需要提供属于给定区域的出租车,由 4 个坐标定义。

如果我使用 $geowithin,它提供按区域定义的点,我不会得到排序结果,如果我像上面那样使用 $near,我无法限制区域。

实现这一目标的优雅方法是什么?

4

1 回答 1

0

这与确定聚合匹配后与坐标的距离非常相似,但细微差别在于can 本身支持的query选项可能并不明显:$geoNeargeoWithin

bbox = [[
    [-74, 41],
    [-74, 42],
    [-72, 42],
    [-72, 41],

    [-74, 41] // close the loop                                                                
]];

db.foo.aggregate([
    {$geoNear: { // assume field 'pt' because the 2dsphere index is on that                    
        near: {
            type: "Point",
            coordinates: [tpt[0],tpt[1]]
        },
        maxDistance: 1200,  // whatever you like                     
        distanceField: "distance",
       
        // Now, for the sorted-by-distance items that are returned, further
        // filter by a polygon boundary:                                           
        query: {
            'pt': {'$geoWithin': {'$geometry': {'coordinates': bbox, 'type': 'Polygon'}}}
        }
    }}
]);
于 2022-02-28T19:09:11.683 回答