如何更新对象数组?

时间:2016-10-10 19:57:33

标签: javascript rethinkdb

例如,

{
  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字段然后更改它。

3 个答案:

答案 0 :(得分:1)

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

之类的东西
var obj = {...}

你可以做到这一点:

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

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

答案 1 :(得分:1)

到目前为止,您所拥有的内容非常正确,但您将names替换为其第一个子对象(我猜您已经看到了该结果)。

您只需使用merge来更改子对象,并使用changeAt names将更改后的子对象放入数组中,如下所示: / p>

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

希望这有帮助!

答案 2 :(得分:0)

首先,您应该使用replace代替update

  1. 获取没有names字段的记录。
  2. merge使用新的names(从中移除第一个元素,在第一个位置添加我们将white替换为black的{​​{1}} one } field)
  3. 这样的事情:

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