3

我的第一个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: Cannot perform bracket on a non-object non-sequence(这是因为在第二和第三个“b”中没有“d”)。我不能使用nth,因为“d”并不总是在数组的第一个元素处。

4

1 回答 1

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') ];
 })
于 2015-04-19T02:54:22.080 回答