查询地理空间数据时,我有一种奇怪的行为。
来自doc:
我们目前不处理极地或过渡时的包裹 从-180°到+ 180°经度,但是我们检测到搜索的时间 包装并引发错误。
但是我在[179,0]
有一个对象,如果我查询[-179,0]
附近的对象,最大距离为0.9,则返回对象并计算距离为2度。没有错误。
如果我查询相同的位置,但最大距离为1.0,则不返回该对象,仍然没有错误。
这是一个错误还是我错过了什么?我在jira上找不到任何关于这个的报道错误。
PRIMARY> version()
version: 2.0.7
PRIMARY> db.runCommand({geoNear:"GeoBug",near:[-179,0],spherical:true,maxDistance:1.0})
{
"ns" : "mydb.GeoBug",
"near" : "0100000000000000100010100010100000000000100010100010",
"results" : [
{
"dis" : 0.03490658503988567, (2 degrees)
"obj" : {
"_id" : ObjectId("5098e71b744eca2df1b325f2"),
"location" : {
"lonlat" : [
179,
0
]
}
}
}
],
"stats" : {
"time" : 0,
"btreelocs" : 0,
"nscanned" : 2,
"objectsLoaded" : 1,
"avgDistance" : 0.03490658503988567,
"maxDistance" : 0.03490689563235392
},
"ok" : 1
}
PRIMARY> db.runCommand({geoNear:"GeoBug",near:[-179,0],spherical:true,maxDistance:0.9})
{
"ns" : "mydb.GeoBug",
"near" : "0100000000000000100010100010100000000000100010100010",
"results" : [ ],
"stats" : {
"time" : 0,
"btreelocs" : 0,
"nscanned" : 1,
"objectsLoaded" : 0,
"avgDistance" : NaN,
"maxDistance" : 0
},
"ok" : 1
}
答案 0 :(得分:1)
我用2.0.7和2.2.1尝试了这个,我得到了一些不同于你的行为。
我在两个版本中都这样做了:
t = db.test
t.drop()
t.insert({geo: [179,0]})
t.ensureIndex({geo: "2d"})
在2.0.7中,我跑了:
db.runCommand({geoNear:"test", near:[-179,0], spherical:true, maxDistance:1.0})
db.runCommand({geoNear:"test", near:[-179,0], spherical:true, maxDistance:0.9})
并且每个都返回了一个结果。
但是,对于2.2.1,搜索都没有返回结果。这表明2.2.1中没有包装,如文档所述,但在2.0.7中有包装。
答案 1 :(得分:0)
这非常荒谬,但请尝试使用'球形'代替'球形'。
这适合我的情况。
我不知道为什么,现在我正在寻找答案,但我找不到。