访问嵌套的JSON对象时出错

时间:2015-10-27 20:17:58

标签: rethinkdb

这是我的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"); }))

此查询之前有效。现在不行。

2 个答案:

答案 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所有文件来对数据集进行一次清理。