2016-09-17 5 views
1

私はそうのようなのコレクションを持っている:MongoDBの地理空間クエリは

db.records.save({ name : "John Smith", addresses : [ { context : "home" , loc : [ 55.5, 42.3 ] } , { context : "work", loc : [ -74 , 44.74 ] } ] })

をそして私はこのようなインデックスを作成しました:私はしようとすると、今

db.records.createIndex({ "addresses.loc": "2d" })

をし、次のようなクエリを作成します。

db.Company.findOne({ "stores.loc" : { $near :[55.5, 42.3]}})

私が得ようとしているのは、というアドレスの配列を持つjohn smiteです。というのは、関連するアドレスです。私が得るのは、すべてのアドレスでジョンのsmiteです。

どうすれば解決できますか?これは、ドキュメント内のアドレスを取得し、そこから最も近いノードを得るためにあなたのスキーマを変更することができるかどうかを固定することができる

+1

Johnのすべてのアドレスを1つの文書にまとめる特別な理由はありますか? – abhinsit

+0

これらの場所はすべて1つの文書内にあるので、文書を '[55.5、42.3]'の近くで見つけ、文書全体を返します。スキーマを「平坦化する」(つまり、住所ごとに1つの文書を使用する)ことを検討してください。 – Adam

答えて

0

:今address_locとクエリにインデックスを作成

db.records.save({ 
    name : "John Smith", 
    address_context: "home", 
    address_loc : [ 55.5, 42.3 ] 
}) 

db.records.save({ 
    name : "John Smith", 
    address_context: "work", 
    address_loc : [ -74 , 44.74 ] 
}) 

、あなたは最寄の関連を取得しますノード

関連する問題