我想发送一个带有地址的http帖子,该帖子将从数据库中获取文档。我想在getNearest函数中使用该doc的地理数据,最终返回最近的其他四个位置。我如何将这两个查询串在一起?
r.table('dealer_locations').filter(function(dealer) {
return {
dealer : ("Address").match(request.body.Address)
.getNearest(dealer, {
index: 'geodata',
maxResults: 4
})
}
}).run(conn, function(error, cursor) {
if (error) {
handleError(response, error);
} else {
cursor.toArray(function(error, results) {
if (error) {
handleError(response, error);
} else {
response.send(results);
}
});
}
});
答案 0 :(得分:3)
我只是为了更清楚地重新阐述问题:
<强>问题强>
鉴于具有地理数据的特定文档,我还希望将最近的四个位置返回到该位置。
<强>解决方案强>
首先,确保您要在要查询的表格中创建地理位置索引:
r.point
之后,请确保您已在文档中插入r.point
个对象。您不能仅在任何属性上使用地理索引。它们必须是r.table('dealer_locations')
.insert({
name: 'San Francisco',
location: r.point(37.774929, -122.419416)
})
s。
r.table('dealer_locations')
.filter({ name: 'San Francisco' })(0)
.do(function (row) {
return r.table('dealer_locations')
.getNearest(row('location'), { index: 'location', maxResults: 4 })
})
在您插入所有文档后,他们在同一属性上都有r.point
属性,您为其创建了索引,现在您可以开始查询它们了。
如果您想获取某个地点的所有最近位置,您可以执行以下操作:
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 })
}
})
如果要将壁橱位置附加到文档,以便您可以同时返回文档和最近的位置,则可以使用merge
方法执行此操作。
address
最后,如果您想根据地址获取所有最近的位置(假设您的文档同时具有带字符串的location
属性和带有r.point
的{{1}}属性),你可以这样做:
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 })
})
话虽如此,问题可能在于您可能会匹配多个地址,而这些地址不一定是您想要匹配的地址!