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

时间:2015-08-28 00:07:02

标签: rethinkdb

我对RethinkDB很新,我正试图解决一个棘手的问题。

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

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

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')))

从这里开始,我想根据他们与客户重叠的距离订购技术人员的子表。

1 个答案:

答案 0 :(得分:1)

如果没有样本数据集,很难解决这个问题,所以我可以玩游戏。我用我的想象力。

  • 您的Account表存储了客户和技术人员
  • 技术人员文档包含字段location.coverage

通过使用交叉,您可以返回覆盖位置包括客户位置的技术人员列表。

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

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

我希望它有所帮助。如果没有,请在此处发布一些示例数据,我们可以尝试一起解决。