我有以下对象:
{
"_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
基元。
答案 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