我有以下查询-
r.db("schema").table("table")
.get("7201f732-4396-4201-9df4-099506a473b5")("observation")("items")(0)
返回以下结果-
{
"description": null ,
"index": "AF"
"name": "ALL FARM BASE" ,
"opted": true ,
"parent": null ,
"properties": [
"AF 1" ,
"AF 2"
] ,
"sub_heads": [
"CB" ,
"AB" ,
"LB"
] ,
"type": "HEAD"
}
查询应该足以解释数据结构,但是我将以任何方式对其进行解释。该查询基本上会首先获取数组items
的元素,该元素是所选文档的对象observation
的属性。
现在如何更新以上查询的description
键?
答案 0 :(得分:0)
数组确实很棘手...类似这样的东西:
r.db("schema").table("table").get("7201f732-4396-4201-9df4-099506a473b5").update({
observations: {
items: r.row('observations')('items').changeAt(
0,
r.row('observations')('items')(0).merge({
description: 'my new description'
}))
}
})
查询应该足以解释该过程,但是无论如何我都会解释。 ;)
.get("7201f732-4396-4201-9df4-099506a473b5")
提供了我们将要进行的选择.update(...)
将在选择中的每个文档上运行其参数,将先前的文档与结果合并(此处的“合并”意味着它不需要像使用.replace(...)
一样提供完整的对象) ,最后将更改提交给数据库{ observations: { items: ... } }
定位我们将要在文档中工作的位置,我们将更改哪些键(这里只有一个,observations.items
)-它是无损的(在对象方面),因为我们重新更新,而不是替换r.row('observations')('items')
的目标是文档中的同一点(r.row
是选择处理上下文中的“当前正在处理的文档”),但是这里我们包含ReQL功能,而不仅仅是使用普通对象.changeAt(...)
将更改其调用的数组,并用第二个参数提供的数据覆盖第一个参数给定的索引,然后返回(不提交)新数组r.row('observations')('items')(0)
像以前一样,但是现在进入observations.items
数组的第一个元素.merge(...)
将其调用的对象与其参数合并,返回(而不是提交)新值英语:获取指定的文档,更新,其中指定的数组更改为指定的索引,新值是旧值一个与指定的description
合并的 。