如何在文档内多个更新一个嵌套的数组在他吗?



我有一个名为chat的桶,其中包含文档模型,如

{
"id": "50542400778551298_5001_abcdef",
"customer": {
...
},
"seller": {
...
},
"complaints": [],
"messages": [
{
"id": "2828911d-b96f-4b90-a52c-252d0324ab69",
"owner": "SELLER",
"content": "Merhabalar",
"readingDate": null,
"createdAt": "2022-06-27T09:16:42.49158+03:00"
},
{
"id": "8cd8c4b7-d599-4dfa-9fa7-be304a3b72b9",
"owner": "SELLER",
"content": "İlan hakkında detay bilgi verir misin?",
"readingDate": null,
"createdAt": "2022-06-27T09:17:43.329741+03:00"
},
{
"id": "4f0ae912-7d65-4e79-9058-2b048c4d9845",
"owner": "SELLER",
"content": "Huhuu",
"readingDate": null,
"createdDate": "2022-06-27T09:18:37.491531+03:00"
},
{
"id": "d2dd61b3-7ff1-4139-a411-9a917c00d4f3",
"owner": "SELLER",
"content": "Orada kimse var mı?",
"readingDate": null,
"createdAt": "2022-06-27T09:18:45.917564+03:00"
},
{
"id": "ea2d8dca-2f8c-4987-9c07-7515a6a0063f",
"owner": "SELLER",
"content": "Döner misininiz?",
"readingDate": null,
"createdAt": "2022-06-27T09:18:52.80337+03:00"
}
],
"status": "ACTIVE"
}

我想在特定时间更新所有消息readingDate,如(2022-06-27T09:18:52.80337+03:00)

但是我找不到一个简单的方法来完成这项任务。

我想写一个N1QL像

UPDATE c.messages SET c.messages.readingDate = NOW_LOCAL()
FROM chat AS c 
WHERE META().id = '50542400778551298_5001_abcdef';

但不工作并给出错误

[
{
"code": 3000,
"msg": "syntax error - at SET",
"query": "UPDATE c.messages SET c.messages.readingDate = NOW_LOCAL()nFROM chat AS c nWHERE META().id = '50542400778551298_5001_abcdef';"
}
]

我看到https://docs.couchbase.com/server/current/guides/bulk-operations.html.

据我所知,一般解决方案获取所有消息并基于cas更新它们。

但也许我相信有一个简单的方法,所以我想问StackOverflow社区。

由于这个问题,我写了n1ql

UPDATE chat USE KEYS '50542400778551298_5001_abcdef'
SET c.readAt = NOW_LOCAL() FOR c IN messages END
RETURNING messages;

最新更新