2016-09-17 2 views
1

У меня есть коллекция как так:MongoDB геопространственных запросов для multyindex данных

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 с массивом адресов с только соответствующий адрес, что я получаю, john smite со всеми адресами, поэтому я не знаю.

Как это решить?

+1

Есть ли какая-либо конкретная причина наличия всего адреса Джона в одном документе? – abhinsit

+0

Поскольку все эти местоположения находятся внутри одного документа, он находит документ рядом с '[55.5, 42.3]' и возвращает весь документ. Возможно, подумайте о «сглаживании» схемы (т. Е. Используйте один документ для каждого адреса). – Adam

ответ

0

Это может быть исправлено, если вы можете изменить вашу схему, чтобы взять один адрес в документе и получить ближайший узел оттуда затем:

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 ] 
}) 

Теперь создайте индекс address_loc и запрос, вы получите соответствующие ближайшими узлы

Смежные вопросы