2012-02-21 8 views
1

地理空間データのネストされた配列を含むレコードを挿入しようとしています。私は配列を代わりにオブジェクトにしようとしましたが、そこには運がありません。ここでは、多かれ少なかれ、インサートラインです:PHPで地理空間データを含むMongodbレコードを挿入できません

$collection->insert($obj, array('safe'=>true)); 

一つ興味深いのは、私は、インデックス「LOC」なだけ整数として何か他のもの、インサート作品呼び出すときということです。

は、ここでのMongoDBに入るべきである配列だが、ではありません。

Array 
(
    [name] => Home 
    [address] => 500 Pole Line Road 
    [city] => Davis 
    [state] => CA 
    [zip] => 95618 
    [loc] => Array 
    (
     [lon] => -121.726710 
     [lat] => 38.549576 
    ) 

) 
+0

エラーメッセージが表示されますか? –

+0

エラーメッセージは表示されませんが、奇妙なことには、配​​列インデックスを 'loc'から 'location'などに変更すると挿入が機能することがわかります。ジオスペースインデクシングを混乱させるだろうか? –

+0

私はそれがすべきではないと思う、私はloc以外のキーの例を見た。あなたは試してみる必要があります。 –

答えて

0

MongoDBはgeospational「フィールド」のためのキーを気にしません。最初の2つの要素は、最初の要素が経度で、2番目の要素が緯度です。最初の名前を「lat」と名づけたとしても、それはやはり経度とみなされます。私がそれが挿入されないと思う唯一の理由は、おそらくあなたはいくつかのフィールドにユニークなキーを持っていることでしょう。

あなたが挿入しているものの完全な(しかし小さな)例を追加する場合は、私は間違っていることをうまく示すために答えを更新できます。

+0

問題は完全に恥ずかしいですが、起こっていたことは私が緯度/経度を取得するAPI呼び出しを行っていて、それらの数値が 'loc'配列を介して挿入しようとしていた文字列になってしまったことです。私がまだ完全に理解していないことは、文字列が許されない理由です。明らかに、mongoがデータタイプを変換するほどスマートでない限り、ジオスペースインデックスでは使用できませんでしたが、インサート全体が機能しないように制限するものがありました。私はそれがPHPのドライバかmongoのいずれかだったと思うが、誰かがそれらの文字列を気に入らなかった!ダブルキャストで簡単に修正できました。 –

0
array('loc' => array(floatval($lon), floatval($lat))) 
関連する問題