2dsphere のユニーク インデックスを使用して mongodb にジオ ポイントを挿入しようとしましたが、多くの重複キー エラーが発生します。
簡単な再現デモ:
> version()
2.4.5
> use geo
> db.test.ensureIndex( { loc : "2dsphere" }, unique=true )
> db.test.insert({"loc" : { "type" : "Point", "coordinates" : [ 113.3736642, 23.04469194 ] }})
> db.test.insert({"loc" : { "type" : "Point", "coordinates" : [ 113.3734775, 23.04609556 ] }})
E11000 duplicate key error index: geo.test.$loc_2dsphere dup key: { : "1f22000102222113" }
これらのまったく異なる点が重複キーエラーを引き起こすのはなぜですか?
アップデート:
他のテストを試してみましたが、精度と関係があるようです。
> db.test.ensureIndex( { loc : "2dsphere" }, unique=true )
> db.test.insert({"loc" : { "type" : "Point", "coordinates" : [ 113.373, 23.044 ] }})
> db.test.insert({"loc" : { "type" : "Point", "coordinates" : [ 113.373, 23.045 ] }})
E11000 duplicate key error index: geo.test.$loc_2dsphere dup key: { : "1f22000102222113" }
> db.test.insert({"loc" : { "type" : "Point", "coordinates" : [ 113.373, 23.046 ] }})
E11000 duplicate key error index: geo.test.$loc_2dsphere dup key: { : "1f22000102222113" }
> db.test.insert({"loc" : { "type" : "Point", "coordinates" : [ 113.373, 23.047 ] }})
E11000 duplicate key error index: geo.test.$loc_2dsphere dup key: { : "1f22000102222113" }
> db.test.insert({"loc" : { "type" : "Point", "coordinates" : [ 113.373, 23.048 ] }})
E11000 duplicate key error index: geo.test.$loc_2dsphere dup key: { : "1f22000102222113" }
> db.test.insert({"loc" : { "type" : "Point", "coordinates" : [ 113.373, 23.049 ] }})
このテストでは、23.045 ~ 23.048 が失敗し、23.044 23.049 のみが成功しました。