2015-09-25 82 views
0

如何使用Python客戶端驅動程序在RethinkDB中編寫等效語句?在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腳本:

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) 
})