首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RethinkDB查询中心点与位置子表之间的OrderBy距离

RethinkDB查询中心点与位置子表之间的OrderBy距离
EN

Stack Overflow用户
提问于 2015-08-28 08:07:02
回答 1查看 98关注 0票数 0

我是RethinkDB的新手,正在尝试解决一个棘手的问题。

我有一个数据库,目前包括两种帐户,客户和技术人员。我想写一个查询,它将生成一个技术人员表,按他们到给定客户的距离排序。技术人员和客户帐户都具有坐标位置属性,并且技术人员具有坐标的大致圆形多边形形式的服务区属性。

例如,一个查询返回一个技术人员表,该表的服务区域与给定客户的位置重叠,如下所示:

代码语言:javascript
运行
复制
r.db('database').table('Account')
.filter(r.row('location')('coverage').intersects(r.db('database')
.table('Account').get("6aab8bbc-a49f-4a9d-80cc-88c95d0bae8d")
.getField('location').getField('point')))

从这里,我想要根据技术人员到他们重叠的客户的距离对得到的技术人员子表进行排序。

EN

回答 1

Stack Overflow用户

发布于 2015-08-28 14:28:11

在没有样本数据集的情况下,很难做到这一点,这样我就可以发挥作用了。我在发挥我的想象力。

具有字段location.coverage

  • 您的Account表存储了customer和has文档

通过使用intersect,您可以返回覆盖地点包括客户地点的技术人员列表。

要对其进行排序,我们可以将一个函数传递给orderBy命令。对于每个技术人员,我们使用distance命令获取他们的point字段,返回距离数字,并使用该数字进行排序。

代码语言:javascript
运行
复制
r.db('database').table('Account')
.filter(
  r.row('location')('coverage')
    .intersects(
    r.db('database').table('Account').get("6aab8bbc-a49f-4a9d-80cc-88c95d0bae8d")('location')('point')
  )
)
.orderBy(function(technician) {
    return technician('location')('point')
            .distance(r.db('database').table('Account').get("6aab8bbc-a49f-4a9d-80cc-88c95d0bae8d")('location')('point'))
})

我希望它能帮上忙。如果没有,让我们在这里发布一些示例数据,我们可以一起试着弄清楚。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32261385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档