更新沙发床中的嵌套数组

时间:2020-02-26 13:21:52

标签: couchbase n1ql

使用以下给定的数据模型:

{
  "snapshots": [
    {
      "createdAt": "2019-03-15T06:31:04.447Z",
      "entries": [
        {
          "balance": 139763,
          "expiresOn": "3019-03-31T23:59Z"

        },
        {
          "balance": 46961,
          "expiresOn": "3019-03-31T23:59Z"

        }
      ]
    }
  ],
  "type": "account"
}

我正在尝试更新快照数组中条目数组中的 expiresOn 字段,以下是我尝试但未执行的查询工作。

UPDATE bucket
SET snapshot.entry.expiresOn = "2020-03-30T23:59Z"
FOR snapshot IN snapshots
  FOR entry IN snapshot.entries
END
WHERE type = "account"

2 个答案:

答案 0 :(得分:2)

让它正常工作,是一个愚蠢的错误。

json模型中的内部数组应该是查询中的外部for循环。


UPDATE bucket
SET entry.expiresOn = "2020-03-30T23:59Z"
FOR entry IN snapshot.entries FOR snapshot IN snapshots END
WHERE type = "account"

答案 1 :(得分:2)

以下是正确的查询,用于更新快照数组中的entrys数组中的expiresOn字段。 SET snapshot.entry.expiresOn =“ 2020-03-30T23:59Z”可能会更新错误的位置或不会更新(由于额外引用了快照)。

UPDATE bucket AS b
SET entry.expiresOn = "2020-03-30T23:59Z"
FOR entry IN snapshot.entries FOR snapshot IN b.snapshots END
WHERE b.type = "account";