如何使用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()
答案 0 :(得分:0)
在Java Script中:
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中应该是这样的。
答案 1 :(得分:0)
我没有Python的例子。我给出了JavaScript示例,我认为您可以在API doc上进行比较,以编写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)
})