更新RethinkDB中的子文档列表对象值

时间:2018-10-28 23:39:11

标签: rethinkdb rethinkdb-javascript rethinkdb-python

halo_field.merge(subhalo, left_index=True, right_index=False, right_on='halo_index')

在Java或Python中如何在RethinkDB中将子文档“ A”的“名称”更新为2?

1 个答案:

答案 0 :(得分:0)

如果您可以依靠“ A”元素的位置,则可以这样更新:

r.db("DB").table("TABLE").get(1)
  .update({subdocuments:
    r.row("subdocuments").changeAt(0, r.row("subdocuments").nth(0).merge({"name":2}))})

如果您不能依靠这个职位,就必须自己找到它:

r.db("DB").table("TABLE").get(1).do(function(doc){
  return doc("subdocuments").offsetsOf(function(sub){return sub("id").match("A")}).nth(0)
    .do(function(index){ 
      return r.db("DB").table("TABLE").update({"subdocuments": 
        doc("subdocuments").changeAt(index, doc("subdocuments").nth(index).merge({"name":2})) })})
})

作为替代方案,您可以使用map函数遍历数组元素并更新与您的条件相匹配的元素

r.db("DB").table("TABLE").get(1)
   .update({
     subdocuments: r.row("subdocuments").map(function(sub){  
       return r.branch(sub("id").eq("A"), sub.merge({name: 2}), sub)
     })
   })