如何在rethinkdb中单独剥离数组的元素?

时间:2014-05-14 13:36:55

标签: javascript rethinkdb

我有这样的文件:

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

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

[原始问题]

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

1 个答案:

答案 0 :(得分:2)

你的原始问题有这个对象:

{ 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')