2012-04-13 8 views
0

私は、次のようなオブジェクトを持っている: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プリミティブとしてのみ表示されます。

答えて

1

あなたの質問は正しくありません。次のものが必要です。

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

そして

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

+0

私はそれがデフォルトで 'と'でしょうか? MongoDBでは、彼または彼女を単一のクエリーにすることはできませんか? – Rup

+1

@Rupすることができます '{$ or:{{location:{$ gte:180}}、{location:{$ lte:-180}}}}' –

+0

@EveFreeman:どうすればこの問題を解決できますか? –

0

を、私は同様の問題に遭遇してきた、と私は緯度/経度の1が-180に正確に等しい場合ensureIndexが壊れることを突き止めることができましたあなたがこの問題を回避したい場合は、これらのケースを探します。それ以外の場合は修正があるように見えます:https://github.com/mongodb/mongo/commit/86b5b89c2785f3f45ad2674f48fe3189c137904c

関連する問題