访问嵌套 JSON 对象时出错

Error while accessing nested JSON object

这是我的 RethinkDB 中的示例行 table。

 {
  "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"); }))

此查询以前有效。现在无效。

如果您以某种方式在 part 数组中得到一个字符串而不是对象的元素,就会出现该错误。试试 运行 .filter(r.row('part').contains(function(product) { return product.typeOf().ne('OBJECT'); }),那应该 return 在 part 数组中有一个字符串的所有行。

关于您对@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 中的所有文档来清理你的数据集。