这是我的RethinkDB表中的示例行。
{
"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");
}))
此查询之前有效。现在不行。
答案 0 :(得分:1)
如果你以某种方式结束了part
数组中的一个字符串而不是一个对象,那么你会得到那个错误。尝试运行.filter(r.row('part').contains(function(product) { return product.typeOf().ne('OBJECT'); })
,它应该返回part
数组中包含字符串的所有行。
答案 1 :(得分: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
所有文件来对数据集进行一次清理。