MongoDB geoNear聚合-操作顺序
我有一个简单的MongoDo聚合查询:MongoDB geoNear聚合-操作顺序,mongodb,aggregation-framework,geospatial,Mongodb,Aggregation Framework,Geospatial,我有一个简单的MongoDo聚合查询: { "$geoNear": { "near": { "type": "Point", "coordinates": [ -73.982, 40.7685 ] }, "spherical": "true", "distanceField": "d",
{
"$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
}
我的简单问题是关于查询操作顺序的。查询是否扫描所有文档以查找匹配的coords,然后从该数据集中匹配ipv:1,然后按created_at排序,然后限制为5
如果是这样的话,这是不会发生的。我必须设置一个“限制”字段,否则它将只扫描最后100条记录,匹配地理坐标,然后执行操作顺序
有没有办法让MongoDB扫描所有记录以查找匹配的GPS坐标,然后执行匹配?下面是$geoNear的工作原理:它将光标指向坐标满足maxDistance要求的文档。然后它在光标上迭代,并为每个文档检查它是否符合查询要求。如果没有,它将跳过它并移动到下一个文档。它会一直这样做,直到找到限制多个文档或光标结束。请注意,这是$geoNear命令的limit参数,而不是稍后在聚合管道中指定的$limit操作 默认限制为100,因此,如果不指定限制,则将获得与查询匹配且坐标满足maxDistance的前100个文档,按created_at对这100个文档进行排序,然后取前5个文档。当您指定limit:100000时,您将获得与查询匹配且坐标满足maxDistance的前100000个文档,按created_at对这些100000个文档进行排序,然后取前5个文档
如果您试图获取离您的点最近的5个文档,然后按created_at对这5个文档进行排序,则应将$geoNear limit设置为5,并从管道中删除$limit操作。如果要扫描所有文档以查找匹配的坐标,请按created_at对生成的文档进行排序,然后获得前5个,您应该将$geoNear限制设置为大于集合大小的值,其余的保持不变。希望有帮助。太棒了!谢谢你的解释!