2014-05-14 27 views
1

我有这样的文件:如何在rethinkdb中单独剥离数组的元素?

{ 
    id:1, 
    "A": [ 
    { 
     "C": "abc", 
     "D": [{X:"test"},{X:"test2"}] 
    }, 
    { 
     "C": "fg", 
     "D":["X1"] 
    } 
    ] 
} 

如何获得的文档的所有ID其标记匹配A-> d - > X具有价值的 “测试”。我可以使用concatMap(),但是当我使用它时,我无法获得“ID”字段,也无法在map之内使用它,请问Mongodb的聚合框架中是否有类似$unwind的类似功能? 类似:Querying array of nested objects

[原创提问]

{ 
id:2, 
tags[{a:3,b:4},..] 
} 

回答

2

你originial问题有这个对象:

{ id: 2, 
    tags: [ { a: 3, b: 4 }, ... ] } 

您可以构建查找相关文档的谓语,并将它传递给filter

r.table(...).filter(r.row('tags')('a').contains(3))('id') 

在这种情况下,查询的('a')部分,当应用于阵列,返回该阵列中的每个对象的a场的阵列,如果有一个。

你编辑的问题有一个更复杂的对象,但原理是一样的:

r.table(...).filter(
    r.row('A')('D').concatMap(function(x){return x})('X').contains("test") 
)('id') 
+0

谢谢你的回答,我期待不同的东西,所以我编辑我的问题。我必须深入内部对象和数组来检查它是否存在,最后我必须返回第一级元素。 –

+0

我已经更新了我的答案。 – AtnNn

相关问题