0

我有如下对象:

{
    "_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(是的,我知道这对于产品来说还不够好)。这些文档由 Java 文档导入,其中位置对象仅表示为double原语。

4

2 回答 2

1

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

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

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

于 2012-04-13T17:16:15.387 回答
0

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

于 2012-06-24T00:42:05.120 回答