обновление вложенного массива в couchbase - PullRequest
0 голосов
/ 26 февраля 2020

С учетом приведенной ниже модели данных:

{
  "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 ]

2 голосов
/ 26 февраля 2020

Ниже приведен правильный запрос на обновление поля 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";
2 голосов
/ 26 февраля 2020

получил это работает, была глупая ошибка.

Внутренний массив в модели json должен быть внешним для -l oop в запросе.


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

...