MongoDB"指向不在[-180,180)和#34的区间内;

时间:2012-04-13 17:06:55

标签: mongodb geospatial

我有以下对象:

{
    "_id" : ObjectId("4f7f0d64e4b0db1e18790f10"),
    "location" : [
        0.674081,
        23.473
    ],
    "name" : "Item Name"
}

如果我尝试在位置字段上创建2D索引,则会出现错误:

> db.Place.ensureIndex({location:"2d"});
point not in interval of [ -180, 180 )

我已经尝试查找超出范围的文档,但这不会返回结果:

> db.Place.find({"location.0":{"$lte":-180, "$gte":180}});
> db.Place.find({"location.1":{"$lte":-180, "$gte":180}});

我还尝试了以下查询以确保:

> db.Place.find({"location":{"$size":0}}).count();
0
> db.Place.find({"location":{"$size":1}}).count();
0
> db.Place.find({"location":{"$size":2}}).count();
363485
> db.Place.count();
363485

我可以使用哪些其他方法来查找错误的文档?

有关我在32位Linux上使用MongoDB版本2.0.2的信息(是的,我知道这对于prod来说还不够好)。这些文档由Java文档导入,其中位置对象仅表示为double基元。

2 个答案:

答案 0 :(得分:1)

您的查询不太正确。你需要:

  

db.Place.find({“location”:{“$ lte”: - 180}})

  

db.Place.find({“location”:{“$ gte”:180}})

答案 1 :(得分:0)

我遇到了类似的问题,当lat / lon中的一个完全等于-180或180时,我已经能够确定ensureIndex会中断。如果你想要查找那些情况解决这个问题,否则它看起来像是修复:https://github.com/mongodb/mongo/commit/86b5b89c2785f3f45ad2674f48fe3189c137904c