RethinkDB,查询地图和过滤器

时间:2016-06-14 19:57:15

标签: python rethinkdb

我有rethinkdb'竞争'表。在第二级,我得到了跑步者,每个跑步者都有一个结果列表:

"total_results": {
  "433915": [  #runner_id
    {
      "judge": "15561671",
      "result": 5,
      "round": "1"
    },
    {
      "judge": "08136a59",
      "result": 4,
      "round": "1"
    }
  ]
}

我重新思考db查询:

results = (r.table('competitions').filter(lambda c: c['unique_id'] == competition_id)
    .map(lambda c: c['total_results'])
    .map(lambda t: t[runner_id])
.run(conn))

这段代码很好用。现在我想根据'round'值应用过滤器。我在第二个.map()之后添加它,因此结果查询看起来像:

results = (r.table('competitions').filter(lambda c: c['unique_id'] == competition_id)
    .map(lambda c: c['total_results'])
    .map(lambda t: t[runner_id])
    .filter(lambda x: x['round'] == round)
.run(conn))

但我得到空名单。这对我来说很奇怪,因为如果我在rethinkdb查询之外移动.filter()并执行它:

by_round = filter(lambda x: x['round'] == round, results)

我得到了结果。 在重新思考查询中应该有一些我做错了...你能给我一个提示吗?

P.S。我在数据库中有数千个结果。根据我的查询参数应该有几十个结果。

1 个答案:

答案 0 :(得分:1)

我认为您希望第二个map成为concat_map。 (或者,如果您喜欢现有的输出格式,可以将filter置于map .map(lambda x: x.filter(...))内。{/ p>