Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按zip进行MongoDB地理空间搜索_Mongodb_Mongoose_Mongodb Query_Geospatial - Fatal编程技术网

按zip进行MongoDB地理空间搜索

按zip进行MongoDB地理空间搜索,mongodb,mongoose,mongodb-query,geospatial,Mongodb,Mongoose,Mongodb Query,Geospatial,我正在使用MongoDB进行一些地理空间查询。我的zipcode集合如下所示: { _id:“60661”, 城市:“芝加哥”, 国家:“IL”, loc:[ -87.68, 41.83 ] } 添加2d索引后,我可以成功运行以下查询: db.zipcodes.find({loc:{$near:[-87.68,41.83],$maxDistance:5*(1/69)}) 这将返回发送的lon/lat坐标5英里内的所有Zipcode 我该如何发送zipcode,而不是lon/lat位置?像这样

我正在使用MongoDB进行一些地理空间查询。我的zipcode集合如下所示:

{
_id:“60661”,
城市:“芝加哥”,
国家:“IL”,
loc:[
-87.68,
41.83
]
}
添加2d索引后,我可以成功运行以下查询:

db.zipcodes.find({loc:{$near:[-87.68,41.83],$maxDistance:5*(1/69)})
这将返回发送的lon/lat坐标5英里内的所有Zipcode

我该如何发送zipcode,而不是lon/lat位置?像这样:

db.zipcodes.find({loc:{$near:'60661',$maxtrance:5*(1/69)})

谢谢

这不是地理空间索引的工作方式,也不是查询的工作方式。当你创建索引时,你的陈述很可能是这样的:

db.zipcodes.ensureIndex({“loc”:“2d”})
因此,您要求在“loc”字段上创建
2d索引
,该字段还包含地理空间索引所需格式的数据。这意味着它在“loc”字段中索引数据

您要做的是以某种方式提供另一个字段,该字段不是查询的“loc”,因此与数据无关。这根本无法工作,因为该数据不在“loc”字段中。本质上,这与在“State”字段下查询“City”的值没有什么不同。地理空间查询中的字段选择没有什么特别的魔力,只有从索引中选择范围的工具

不过,混合查询表单并没有什么错,因此,如果您希望以其他方式过滤结果,而不仅仅是过滤与给定点的接近程度,您可以执行以下操作:

db.zipcodes.find({
“loc”:{
“$near”:[-87.68,41.83],
“$maxDistance”:5*(1/69)
}, 
“_id”:{“$gte”:“60630”,“$lte”:“60680”}
})
这不仅会找到离查询点最近的点,而且会将这些结果限制为范围内的邮政编码

如果事实上您所寻找的只是不知道点坐标,但知道“zipcode”,那么您需要发出两个查询以获得结果

var zipLoc=db.zipcodes.findOne({“\u id”:“60661})
var结果=db.zipcodes.find({
“loc”:{
“$near”:zipLoc.loc,
“$maxDistance”:5*(1/69)
}
})

因此,这就是返回某个“zipcode”附近的结果所要做的

谢谢,尼尔,这是一个很好的回答。我真的很感激!尼尔,你是怎么得到“$gte”值的?