gpt4 book ai didi

MongoDB geoNear 聚合 - 操作顺序

转载 作者:可可西里 更新时间:2023-11-01 09:56:31 24 4
gpt4 key购买 nike

我有一个简单的 MongoDo 聚合查询:

{
"$geoNear": {
"near": {
"type": "Point",
"coordinates": [
-73.982,
40.7685
]
},
"spherical": "true",
"distanceField": "d",
"limit": 100000,
"maxDistance": 8046.7,
"query": {
"ipv": 1
}
}
},
{
"$sort": {
"created_at": -1
}
},
{
"$limit": 5
}

我的简单问题与查询操作顺序有关。查询是否扫描所有文档以查找匹配坐标,然后从该数据集中匹配 ipv: 1,然后按 created_at 排序,然后限制为 5?

如果是这样 - 这不会发生。我需要放置一个“限制”字段,否则它只会扫描回最后的 100 条记录,匹配​​地理坐标,然后执行操作顺序。

有没有办法让 MongoDB 扫描所有记录以查找匹配的 GPS 坐标,然后执行匹配?

最佳答案

$geoNear 的工作原理如下:它获取坐标满足 maxDistance 要求的文档的光标。然后它遍历游标并为每个文档检查它是否符合查询 要求。如果没有,它会跳过它并移至下一个文档。它会一直这样做,直到它找到 limit-many 文档或光标的末尾。请注意,这是 $geoNear 命令的 limit 参数,而不是稍后在聚合管道中指定的 $limit 操作。

默认的 limit 是 100,所以如果你没有指定 limit 你会得到前 100 个匹配 query 的文档坐标满足maxDistance,将这100个文档按created_at排序,然后取前5个。当你指定limit:100000时,你得到的是前100000个匹配查询坐标满足maxDistance的,将这100000个文档按created_at排序,取前5个。

如果您尝试获取离您的点最近的 5 个文档,然后按 created_at 对这 5 个文档进行排序,您应该将 $geoNear limit 设置为 5 并从中删除 $limit 操作管道完全。如果要扫描所有文档以匹配坐标,按 created_at 对生成的文档进行排序,然后获取前 5 个,则应将 $geoNear limit 设置为大于集合大小的值,剩下的留给你。希望对您有所帮助。

关于MongoDB geoNear 聚合 - 操作顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18769792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com