我正在尝试运行一个允许我过滤特定文档的查询,然后检查存储在那里的坐标与我传入的新坐标之间的距离。
我试过这个:
r.db('food').table('fruits')
.hasFields(['origin', 'region'])
.filter({region: 'North America'})
.pluck('gpsLocation')
.distance(r.point(37.759056, 105.015018))
但我收到此错误:e: Expected type DATUM but found SEQUENCE:
从文档中我看到我需要
geometry.distance(geometry[, {geoSystem: 'WGS84', unit: 'm'}])
但我不确定如何让我的查询返回。 gpsLocation
是fruits
表的索引,如果这会产生影响。
答案 0 :(得分:0)
你不能pluck
索引。我认为您的意思是field
,因为您希望使用pluck
提取该字段的数据。然后从该字段创建具有相同名称的索引。如果我的假设是正确的,下面是我的答案。如果没有,您需要更新您的问题,因为您无法获取索引。
问题是数据类型错误。根据{{3}},命令语法看起来像这样:
geometry.distance(geometry[, {geoSystem: 'WGS84', unit: 'm'}]) → number
r.distance(geometry, geometry[, {geoSystem: 'WGS84', unit: 'm'}]) → number
这意味着distance
可以调用r
,传递两个geometyr
对象,或调用geometry
对象,并传递另一个几何对象作为其第一个参数
您的查询返回了一个STREAM。您可以通过阅读API文档找到其数据类型,或者只使用typeOf
。
r.db('food').table('fruits')
.hasFields(['origin', 'region'])
.filter({region: 'North America'})
.pluck('gpsLocation')
.typeOf()
因此,您必须以某种方式遍历STREAM,并在流文档上调用distance
。
r.db('food').table('fruits')
.hasFields(['origin', 'region'])
.filter({region: 'North America'})
.pluck('gpsLocation')
.map(function(location) {
return location.distance(r.point(37.759056, 105.015018))
})
它有点类似于你有一个数组,并在JavaScript中调用map
来遍历数组,并在元素上运行回调函数。虽然在这里,map函数在服务器上运行。
假设您gpsLocation
字段包含geometry
对象,例如具有经度和纬度的点(https://rethinkdb.com/api/javascript/distance/)。