我的第一个 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”不会总是在数组的第一个元素。
答案 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') ];
})