我有以下问题-
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"
}查询应该足以解释数据结构,但我将以任何方式对其进行解释。该查询基本上首先获取所选文档的对象observation的属性数组items的元素。
现在如何更新上述查询的description键?
发布于 2018-08-28 10:19:07
数组确实很棘手……如下所示:
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")提供了我们将要处理的选择,合并将在选择中的每个文档上运行它的参数,将前一个文档与结果合并(这里的“on.update(...)”表示不需要提供完整的对象,就像使用.replace(...)时一样),最后将更改提交到我们将在文档中工作的DB{ observations: { items: ... } }目标,我们将更改哪些键(这里只有一个,observations.items) -它是无损的(对象方面的),因为我们正在更新。not replacingr.row('observations')('items')的目标是文档中的同一个点(在选择处理上下文中,r.row是“当前处理的文档”),但是这里我们使用的是ReQL功能,而不仅仅是使用普通的array.merge(...)会改变它被调用的数组,用它的第二个参数提供的数据覆盖它的第一个参数给出的索引,并像前面那样返回(不提交)新的arrayr.row('observations')('items')(0),但是现在走进observations.items and的第一个元素合并了它被调用的对象和它的参数。返回(不提交)新值获取指定的文档,使用在指定索引处更改的指定数组更新它,新值是与指定description合并的旧数组。
https://stackoverflow.com/questions/52026295
复制相似问题