You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何更新Couchbase中嵌套结构记录的营业时间字段?

解决Couchbase嵌套数组字段更新问题

适用的N1QL更新语句

针对你的数据结构和需求,可以使用Couchbase的N1QL语句批量更新目标字段:

UPDATE `your-bucket-name`
SET `shops`.`1`.`workingHours` = ARRAY
    CASE
        WHEN hour.interval.open = 9 AND hour.interval.closed = 15 THEN
            OBJECT_PUT(OBJECT_PUT(hour, "interval", {"open": 12, "closed": 20}), "info", hour.info)
        WHEN hour.interval.open = 8 AND hour.interval.closed = 18 THEN
            OBJECT_PUT(OBJECT_PUT(hour, "interval", {"open": 10, "closed": 16}), "info", hour.info)
        ELSE hour
    END
    FOR hour IN `shops`.`1`.`workingHours` END
WHERE `shops`.`1`.`workingHours` IS NOT MISSING;

语句说明

  • 将your-bucket-name替换成你实际使用的Couchbase桶名称
  • ARRAY ... FOR hour IN ... END:遍历workingHours数组的每个元素,逐个判断并处理
  • CASE分支:根据原营业时间的open和closed值匹配对应规则,替换interval字段,同时保留原info内容
  • WHERE条件:仅更新存在shops.1.workingHours的文档,避免无意义操作

如果需要匹配所有shop ID(不止shops.1),可以用通用写法遍历shops对象的所有键:

UPDATE `your-bucket-name`
SET `shops` = OBJECT
    KEY k: OBJECT_PUT(v, "workingHours", ARRAY
        CASE
            WHEN hour.interval.open = 9 AND hour.interval.closed = 15 THEN
                OBJECT_PUT(OBJECT_PUT(hour, "interval", {"open": 12, "closed": 20}), "info", hour.info)
            WHEN hour.interval.open = 8 AND hour.interval.closed = 18 THEN
                OBJECT_PUT(OBJECT_PUT(hour, "interval", {"open": 10, "closed": 16}), "info", hour.info)
            ELSE hour
        END
        FOR hour IN v.workingHours END)
    FOR k, v IN `shops` END
WHERE ANY k IN OBJECT_NAMES(`shops`) SATISFIES `shops`[k].workingHours IS NOT MISSING END;

内容的提问来源于stack exchange,提问作者Emanuel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 13:55:17