如何使用 Python 客户端驱动在 RethinkDB 中编写等效语句?
SELECT id fields FROM tasks WHERE id NOT IN (SELECT id FROM finished_tasks)
这是我尝试过的:
r.table('tasks').filter(lambda row: r.not(row['id'] in r.table('finished_tasks').pluck("id").coerce_to('array').run()
如何使用 Python 客户端驱动在 RethinkDB 中编写等效语句?
SELECT id fields FROM tasks WHERE id NOT IN (SELECT id FROM finished_tasks)
这是我尝试过的:
r.table('tasks').filter(lambda row: r.not(row['id'] in r.table('finished_tasks').pluck("id").coerce_to('array').run()
我没有 Python 中的示例。我给出了 JavaScript 示例,我认为您可以在 API 文档上进行比较以编写 Python 等价物。
假设这id
也是finished_tasks
表的主键。
r.table('tasks').filter(function(task) {
return r.table('finished_tasks').get(task('id')).eq(null)
})
如果id
不是 的主键finished_tasks
,让我们为它创建一个二级索引,然后在getAll
// Create index
r.table('finished_tasks').indexCreate('finished_task', r.row('id'))
// Using index for efficient query
r.table('tasks').filter(function(task) {
return r.table('finished_tasks').getAll(task('id'), {index: 'finished_task'}).count().eq(0)
})
在 Java 脚本中:
r.table("tasks").filter(function(task){
return r.expr(r.table("finished_tasks").pluck("id")).map(function(i){
return i("id");
}).coerceTo('array')
.contains(task("id"))
.not();
})
在 Python 中应该是这样的。