2016-09-17 7 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]}})

내가 얻을 것으로 예상되는 주소 배열은 과 일치합니다. 관련 주소는이며, 주소는 모두 죤 스미트입니다. 잘 모르겠습니다.

어떻게 해결할 수 있습니까? 이것은 당신이 문서에서 하나 개의 주소를 가지고 다음 그곳에서 가장 가까운 노드를 얻을 수 있도록 스키마를 변경할 수있는 경우에 고정 할 수 있습니다

+1

John의 모든 주소를 하나의 문서에 포함시키는 특별한 이유가 있습니까? – abhinsit

+0

모든 위치는 하나의 문서 안에 있기 때문에'[55.5, 42.3]'근처에서 문서를 찾아서 전체 문서를 반환합니다. 어쩌면 스키마를 "평평하게"하는 것을 고려할 수도 있습니다 (즉, 각 주소에 대해 하나의 문서 사용). – 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 ] 
}) 

, 당신은 가까운 관련 얻을 것이다 노드