如何在rethinkDB中找到嵌套的Value only字段数据的值?

时间:2015-04-18 23:15:33

标签: rethinkdb reql

我的第一个 concatMap 会返回如下内容。我想得到“d”的值,所以值将是“Rethinkdb”

 [  
       {  
          "a":{  
             "b":{  
                "c":"NoSQL",
                "d":"Rethinkdb"
             }
          }
       },
       {  
          "a":{  
             "b":"text"
          }
       },
       {  
          "a":{  
             "b":"another"
          }
       }
    ]

我试过像r.(...).concatMap(function(f){return f("a")("b")("d")}) 但是显示错误 RqlRuntimeError:无法对非对象非序列执行括号(这是因为在第2和第3个“b”中没有“d”)。我不能使用nth因为“d”不会总是在数组的第一个元素。

1 个答案:

答案 0 :(得分:2)

您应该查看hasFields方法,并且能够使用布尔值检查嵌套属性是否存在。在文档中有一个很好的例子。

我会先获取所有包含您想要的字段的文档,然后执行concatMap

r.table('')
 // Get all documents with a value in property in `a.b.d`
 // `true` here doesn't refer to the value of the property, 
 // but to its existence
 .hasFields({ a: { b: { d: true } } })
 .concatMap(function (row) {
   return [ row('a')('b')('d') ];
 })