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を使用しています(はい、prodには十分ではありません)。doubleドキュメントは、ロケーションオブジェクトがプリミティブとしてのみ表されるJavaドキュメントによってインポートされました。

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 に答える