2015-09-25 3 views
0

Как написать эквивалентный оператор в RethinkDB с использованием драйвера клиента 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

В 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 должно быть что-то вроде этого.

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) 
}) 
Смежные вопросы