如何更新对象数组?

How to update an array of objects?

例如,

{
  id:"monday",
  names:[
    {one:"white", two:"pink"},
    {uno:"blanco", dos:"rosado"}
  ]
}

如何将 white 更改为 black
到目前为止,我得到了这个:

r.db.table.get('monday').update({
  names: r.row("names").nth(0)
})

其中指定了names的第0个索引,但不确定如何进一步指定one字段然后更改它。

也许您的数据存储在一个名为obj的对象中;像

var obj = {...}

你可以做到这一点:

obj.names[0].one = "black";

我实际上已经尝试使用 firebug 没有问题。 数组中的每个元素都是独立的,所以不用担心。

首先,您应该使用 replace 而不是 update

  1. 获取没有 names 字段的记录。
  2. merge 它与新的 names (从中删除第一个元素,在第一个位置添加我们将 white 替换为 black 的新元素 one字段)

像这样:

   r.db.table.get('monday').replace(function(doc){
      return doc.without({names:  true}). merge({
        names: doc("names").deleteAt(0).prepend(doc("names").nth(0).merge({
          one : "black" 
        }))
      })
    })

到目前为止你所拥有的是非常正确的,但是你将 names 替换为它的第一个子对象(我想你已经看到了那个结果)。

你只需要使用一个merge来改变子对象,然后在names上使用一个changeAt将改变的子对象放入数组中,就像这样:

r.db.table.get('monday').update({
  names: r.row('names').changeAt(0, r.row('names').nth(0).merge({one: 'black'}))
})

希望对您有所帮助!