私は、次のようなオブジェクトを持っている:MongoDBの「ポイントは[-180、180)の区間ではない」
{
"_id" : ObjectId("4f7f0d64e4b0db1e18790f10"),
"location" : [
0.674081,
23.473
],
"name" : "Item Name"
}
私がしようとする場所フィールド上の2Dインデックスを作成すると、私はエラーを取得:
> db.Place.find({"location.0":{"$lte":-180, "$gte":180}});
> db.Place.find({"location.1":{"$lte":-180, "$gte":180}});
私はまた、次のクエリを試してみた:私は範囲外ですが、これは結果を返しません文書を発見しようとした
> db.Place.ensureIndex({location:"2d"});
point not in interval of [ -180, 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
不正なドキュメントを見つけるために他にどのような方法がありますか?
私はMongoDBバージョン2.0.2を32ビットLinuxで使用しています(はい、それは十分ではないことがわかります)。ドキュメントはJavaドキュメントによってインポートされ、ロケーションオブジェクトはdouble
プリミティブとしてのみ表示されます。
私はそれがデフォルトで 'と'でしょうか? MongoDBでは、彼または彼女を単一のクエリーにすることはできませんか? – Rup
@Rupすることができます '{$ or:{{location:{$ gte:180}}、{location:{$ lte:-180}}}}' –
@EveFreeman:どうすればこの問題を解決できますか? –