Database 按数据库中的id筛选数组中的对象

Database 按数据库中的id筛选数组中的对象,database,rethinkdb,insert-update,Database,Rethinkdb,Insert Update,TLDR:我面临的最大问题是,我不知道如何通过嵌套在数组对象中的键过滤数组中的对象 假设架构具有此结构: { some_field: "value", some_array: [ { item: { id: "some rethinkdb key", name: "some object" }, relevant_field: { id: "some rethinkd

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: ...
     }
   ]
}
问题如下:我希望为id为“target key”的某个数组中的对象更新属性中的“count”字段。到目前为止,我找到的最好的方法是在我希望更新的项目的“some_array”中找到位置,然后应用在这个问题中找到的方法,由接受的答案提供:。我已经在其他问题上成功地使用了这种方法,但在这个问题上没有

编辑:多亏了mlucy的评论,修复了json结构。

您可以写:

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);
    })}};
  })};
})
你可以写:

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);
    })}};
  })};
})

我很难理解你的例子。
some_array
中的对象似乎有两个字段,这两个字段都有
id
s,
properties
的语法不正确(我不知道它应该是数组还是对象)。@mly谢谢,这确实是个错误。属性是一个对象数组,我想按id更新其中一个对象。我在理解您的示例时遇到一些问题。
some_array
中的对象似乎有两个字段,这两个字段都有
id
s,
properties
的语法不正确(我不知道它应该是数组还是对象)。@mly谢谢,这确实是个错误。属性是一个对象数组,我想通过id更新其中一个对象。我已经测试了这段代码,并且计数没有增加。此外,它在任何时候都不会过滤以仅更新特定的some_数组对象,而是尝试更新所有对象。很抱歉,我花了这么长时间才回复此答案。我已经测试了此代码,并且计数没有增加。此外,它在任何时候都不会过滤以仅更新特定的some_数组对象,而是尝试更新所有对象。很抱歉,我花了这么长时间才回答这个问题。