0

如何使用 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()
4

2 回答 2

0

我没有 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)
})
于 2015-09-25T17:06:25.120 回答
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 中应该是这样的。

于 2015-09-25T14:23:51.283 回答