在rethinkdb中按id过滤数组中的对象

时间:2016-09-11 18:31:00

标签: database rethinkdb insert-update

TLDR:我面临的最大问题是我没有看到如何通过嵌套在其中一个对象内的键来过滤数组内的对象。

假设具有此结构的模式:

{
   some_field: "value",
   some_array: [
     {
        item: {
          id: "some rethinkdb key",
          name: "some object"
        },
        relevant_field: {
          id: "some rethinkdb key",
          name: "so relevant",
          properties: [
            {
              id: "target key",
              count: 2
            },
            {
              id: "some other rethinkdb key",
              count: 1
            },
          ]
        }
     },
     {
        item: ...
     }
   ]
}

问题如下:我希望更新'计数' some_array中具有id' target key'的对象的属性字段。到目前为止,我发现的最好的方法是在'some_array'中找到位置。我希望更新的项目,然后应用此问题中找到的方法,由接受的答案提供:How to update embedded document?。我已成功地将这种方法用于其他问题,但不是在这一方面。

编辑:修复了json结构,感谢mlucy的评论。

1 个答案:

答案 0 :(得分:0)

你可以写:

table.update(function(row) {
  return {some_array: row('some_array').map(function(el) {
    return {relevant_field: {properties: el('relevant_field')('properties').map(function(prop) {
      return r.branch(prop('id').eq('target key'), prop.merge({count: prop('count').add(1)}), prop);
    })}};
  })};
})