2015-11-18 59 views
0

我有以下的JSON在RethinkDB表過濾器嵌套領域

[{"pid": 0, 
    "sk": [ 
    { 
    "sid": 30, 
    "et": 3 
    }, 
    { 
    "sid": 22, 
    "et": 10 
    }, 
    { 
    "sid": 30, 
    "et": 10 
    } 
    ], 
"wc": [ 
    { 
    "wid": 29, 
    "et": 8 
    }, 
    { 
    "wid": 30, 
    "et": 2 
    }, 
], 
"dom": [ 
    { 
    "did": 7, 
    "et": 2 
    }, 
    { 
    "did": 6, 
    "et": 3 
    } 
], 
"ex": 17, 
"av": 12, 
"lc": "FRA" 
    } 

像這樣有幾千的RethinkDB表中的行。

我的目的是要搜索SK的數據,廁所

例如:輸入可以是

「SK」:[{ 「SID」:21, 「等」:5},{」 SID 「:21,」 等 「:5}] 一旦上述條件過濾,將得到的數據集應當再次過濾以WC字段 」WC「:[{」 WID 「:1,」 等「:7},{ 「wid」:4,「et」:5},{「wid」:0,「et」:7}]

我需要包含在給定輸入 中的輸出記錄, , sk:[{sid:2,et:8},{s如果輸入字段低於 [{sid:3,et:9}],則應在輸出數據集中顯示id:3,et:6},{sid:3,et:7},{sid:4,et:9} 7},{SID:4,等:9}]

我下面查詢中使用時,我有{SID:等}在一個元組:

r.db('testdb').table('f_tab'). 
filter(
{ 
"sk": [{"0":"8"},{"1":"5"},{"8":"5"},{"3":"8"},{"12":"4"}] 
}).filter(
{ 
    "wc": [{"0":"7"},{"7":"9"},{"2":"6"},{"8":"4"},{"4":"7"}] 
}).getField('pid') 

現在我爲分裂SID和等的值在服務器端代碼更好的管理

嘗試使用r.row裏面的過濾器,但它不工作 我如何過濾根據我的需求在python中?

什麼是執行嵌套域在性能角度尋找這樣的最佳方法?

回答

1

這是做你想做的嗎?

r.table('f_tab').filter(
    lambda row: r.expr([{'sid': 21, 'et': 5}, ...]).set_difference(row['sk']).is_empty() 
).filter(
    lambda row: r.expr([{'wid': 22, 'et': 6}, ...]).set_difference(row['wc']).is_empty() 
)['pid'] 
+0

非常感謝mlucy!它的工作原理..我認爲lamba沒有在Rethinkdb數據資源管理器中呈現..但在我的Python代碼(Django)中工作 –

+0

如何檢查et等於或大於或等於它的值? –

+0

例如:我想檢查我的表,其中包含所有記錄(等5) - >如果我的表記錄有{'sid':21,'et':7}也應該與{ 'sid':21,'et':5}如果它存在的話。你可以幫我解釋如何在表達式中使用ge表達式的值 –