gpt4 book ai didi

python - 在 RethinkDB 中组合多个过滤器,并将每个过滤器的结果与排名字段合并

转载 作者:太空宇宙 更新时间:2023-11-03 17:46:53 24 4
gpt4 key购买 nike

好吧,假设我有以下列表:

[(('a', 'b', 'c'), 1), (('a', 'c'), 2), (('b'), 3)]

该列表由 3 个元组组成,每个元组有 2 个元素:过滤器和排名。我想动态创建一个 ReQL 查询,为上面列表中的每个过滤器过滤一个表(使用 has_fields),然后添加一个新字段 ranking: [n],当n是上面列表中的排名时。

为了了解这个想法,我将如何使用多个查询来做到这一点:

for filters, ranking in list_:
r.table(...).filter(lambda doc: doc.has_fields(*filters)).map(lambda doc: doc.merge({'ranking': ranking})).run(...)

我想将上述查询合并为一个查询,以尽量减少与数据库的交互。感谢对此的任何帮助。

最佳答案

你可以

  • 使用 concatMap 组合您的查询
  • *filter 等 Python splat 替换为 r.args(filter)
  • .filter(lambda x: x.has_fields(...)) 简化为 .has_fields(...)
  • map 合并相同

代码看起来像这样:

 (r.expr(list_)
.concatMap(lambda filts_rank:
r.table(...)
.has_fields(r.args(filts_rank[0]))
.merge({'ranking': filts_rank[1]}))
).run(...)

请注意,如果 list_ 中有重复的键,表中的某些文档可能会多次返回,每次都有不同的排名。

关于python - 在 RethinkDB 中组合多个过滤器,并将每个过滤器的结果与排名字段合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29654515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com