Я переформулировать вопрос только, чтобы сделать немного более ясным:
Проблема
Учитывая конкретный документ с геоданных, я хочу также вернуть четыре ближайших местах в том, что место нахождения.
Решение
Во-первых, убедитесь, что вы создать индекс гео в таблице вы хотите запросить:
r.table('dealer_locations').indexCreate('location', { geo: true })
После этого, убедитесь, что вы вставили r.point
объекта в документ. Вы не можете просто использовать геоиндекс только для любого свойства. Они должны быть r.point
с.
r.table('dealer_locations')
.insert({
name: 'San Francisco',
location: r.point(37.774929, -122.419416)
})
После того, как вы вставили все документы и все они имеют r.point
свойству объекта на той же собственности вы создали индекс для, теперь вы можете начать запрашивая их.
Если вы хотите, чтобы получить все ближайшие места для местоположения, вы можете сделать следующее:
r.table('dealer_locations')
.filter({ name: 'San Francisco' })(0)
.do(function (row) {
return r.table('dealer_locations')
.getNearest(row('location'), { index: 'location', maxResults: 4 })
})
Если вы хотите добавить кладовых места в документе, так что вы можете вернуть как документ и ближайших местах одновременно, вы можете сделать это, используя метод merge
.
r.table('dealer_locations')
.filter({ name: 'San Francisco' })(0)
.merge(function (row) {
return {
nearest_locations: r.table('dealer_locations')
.getNearest(row('location'), { index: 'location', maxResults: 4 })
}
})
Наконец, если вы хотите, чтобы получить все ближайшие пункты, основанные на адресе (предположим, ваш документ имеет как address
свойство со строкой и location
свойство с r.point
), вы можете сделать что-то подобное :
r.table('dealer_locations')
.filter(r.row('address').match(request.body.Address))
(0) // Only get the first document
.do(function (row) {
// Return the 4 documents closest to the 'location' if the previous document
return r.table('dealer_locations')
.getNearest(row('location'), { index: 'location', maxResults: 4 })
})
это, как говорится, проблема с этим может быть, что вы могли бы соответствовать несколько адресов, которые не обязательно являются те, которые вы хотите, чтобы соответствовать!
Можете ли вы показать, что вы пробовали? Было бы легче работать с начальной точкой. Он также может уточнить некоторые вопросы, которые могут возникнуть в отношении настройки. – Trott
Добавлен код выше :) –