gpt4 book ai didi

node.js - mongodb 对 nodejs 2d 索引的查找,其中 $near 返回为空查找

转载 作者:太空宇宙 更新时间:2023-11-04 01:11:39 25 4
gpt4 key购买 nike

我正在尝试从我的地点集合中获取一些接近坐标的结果。为此,我在具有 lng 和 lat 属性的 location.position 属性上使用二维索引。

问题是我输入的每个坐标都会返回相同的 60 个结果(整个集合)。

我收集的文档均来自靠近我的 GPS 坐标的文档,但是,如果我输入 0.0、0.0 坐标或任何其他对,它返回的结果始终相同。

事实上,如果我使用空 find(),查询返回的结果完全相同。

索引似乎已正确创建,因为它没有返回任何错误。

我收藏中的一个对象是这样的:

{ "_id" : "80293840923...", 
"name": "myname",
"location" : {
"position" : { "lng": -196988, "lat": 43.30594 }
"address": "example",
"city": "example" }
}

索引的创建方式如下:

places_collection.ensureIndex({"location.position": "2d"}, {name: "index2dLocation"}, function(error, indexName){
callback("", "Indice creado: " + indexName)
});

搜索将如下所示:

places_collection.find( 
{ "location.position" : { $near : [ parseFloat(-123.98) , parseFloat(162.342) ] } }
).toArray(function(error, results) {
if( error ){ callback(error, "")
}else{ console.log(results.length); callback(null, results); }
});

最后,正如之前所说,我的搜索总是返回相同的结果。它并不关心我是否放置一个坐标或另一个坐标。即使它也不关心我是否做了一个空的 find()。

请问这里有什么帮助吗?我不知道如何让它发挥作用。

非常感谢。

最佳答案

最后,解决方案是添加 $maxDistance 属性,以避免所有文档超出 $maxDistance 中的半径。

如果您不放置该属性,并且只有 10 个文档位于一个坐标附近,那么如果您在一个很远的坐标中进行查找,它仍然会返回相同的 10 个文档,因为您在新坐标附近没有更多文档。

此外,重要的是要说明 $maxDistance 的单位是,所以这是我的解决方案:https://stackoverflow.com/a/7841830/974828

要将度数转换为公里,您必须除以 111.12。

结果如下:

 db.places.find( { loc : { $near : [50,50] , $maxDistance : 1/111.12 } } )

关于node.js - mongodb 对 nodejs 2d 索引的查找,其中 $near 返回为空查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16700707/

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