Python操作RethinkDB时带过滤条件的eqJoin关联查询无法生效问题
问题原因
你写的关联查询存在两个核心错误:
eq_join关联后返回的每条结果结构为固定的{"left": 左表<records>记录, "right": 右表<records_master>记录},filter 的 lambda 只能接收单个参数(即整条关联结果),你传入两个参数的写法不符合语法规则。- 关联的右表名拼写错误:你实际的表名是
records_master,代码里写的是records-master,表名不匹配会导致关联失败。
正确实现
推荐优先使用「先过滤左表再关联」的写法,提前筛掉左表不符合条件的记录,减少关联数据量,查询性能更好:
data = r.table("records")\ .filter( lambda doc: (doc["payload"]["uuid"] == <some_value>) & (doc["payload"]["version"] == <some_version>) )\ .eq_join("record_id", r.table("records_master"))\ .filter(lambda join_item: join_item["right"]["version"]["mode"] == 1)\ # 可选:如果不需要left/right的嵌套结构,添加.zip()可以合并两个表的字段为平级对象 # .zip() .coerce_to("array")\ .run(connection)
如果你需要坚持关联后再统一过滤的逻辑,可使用以下写法:
data = r.table('records')\ .eq_join('record_id', r.table('records_master'))\ .filter( lambda join_item: (join_item["left"]["payload"]["uuid"] == <some_value>) & (join_item["left"]["payload"]["version"] == <some_version>) & (join_item["right"]["version"]["mode"] == 1) ).coerce_to("array")\ .run(connection)
内容的提问来源于stack exchange,提问作者sharingiscaring
相关产品推荐
相关产品推荐

