我有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。我在数据库中有数千个结果。根据我的查询参数应该有几十个结果。
答案 0 :(得分:1)
我认为您希望第二个map
成为concat_map
。 (或者,如果您喜欢现有的输出格式,可以将filter
置于map
.map(lambda x: x.filter(...))
内。{/ p>