2015-10-27 53 views
0

這是我RethinkDB表中的示例行。訪問嵌套JSON對象時出錯

{ 
    "a1": "val1" , 
    "a2": "val2" , 
    "a3": "val3" , 
    "a4": "val4" , 
    "part": [ 
    { 
    "id": "reql" , 
    "position": "student" 
    } , 
{ 
"id": "sdsadda" , 
"position": "officer" 
} 
] , 
"a5": "val5" 

} 

我要訪問一個嵌套的JSON對象,但我得到的誤差e:不能在非對象非序列"string" 我需要在輸出行整行匹配的ID進行支架「reql 「 這是我的查詢

r.db('dbname').table('tablename').filter(r.row('part').contains(function(product) { return product('id').eq("reql"); }))

該查詢。它工作之前沒有現在。

回答

1

如果你想知道part數組中的元素是一個字符串而不是對象,那麼你會得到這個錯誤。嘗試運行.filter(r.row('part').contains(function(product) { return product.typeOf().ne('OBJECT'); }),它應該返回part陣列中包含字符串的所有行。

+0

是否有可能編寫一個查詢結果,儘管id在一些行中是字符串而在其他所有對象中都是對象? – Puja

+0

你可以用'product.typeOf()。eq('OBJECT')和(product''id')。eq('reql'))'來代替'contains'的主體。 – mlucy

0

關於你的評論@Puja,我想這應該爲你做它:

r.db('dbname').table('tablename').filter(function(d){ 
    d("part").typeOf().eq("ARRAY"); 
}).filter(r.row('part').contains(function(d) { 
    return d('id').eq("reql"); 
})) 

雖然,這比@ mlucy的回答效率較低,而你絕對應該只是做了一個傳過來的數據集通過修復所有文件清理它part: STRING