【问题标题】:Increment embedded entity property using function style value using Typeorm @createQueryBuilder使用 Typeorm @createQueryBuilder 使用函数样式值增加嵌入式实体属性
【发布时间】:2022-02-16 17:16:37
【问题描述】:

这是我的实体定义

我想要实现的是增量

status.sentCount

每次调用 api 时。

我浏览了文档并尝试实现嵌入式实体的解决方案

虽然它适用于“年龄”等直接字段,但似乎不适用于简单 json 对象“状态”。

谢谢。任何帮助表示赞赏。

【问题讨论】:

    标签: postgresql nestjs typeorm


    【解决方案1】:

    您正在处理无法直接更新的 jsonb 类型数据。您可以使用 Postgres 提供的jsonb_set 函数。

    set(`jsonb_set(status, '{sentCount}', 'new_value')`)
    

    我没有尝试过,但我希望它对你有用。

    你可以在这里找到更多信息https://aaronbos.dev/posts/update-json-postgresql

    已编辑:

    使用以下查询

    UPDATE your_table SET status = jsonb_set(status, '{sentCount}', (COALESCE(status->>'sentCount','0')::int + 1)::text::jsonb) WHERE id = 1;
    

    【讨论】:

    • 那行不通。我怎样才能获得以前的价值?我想做的是 status.sentCount += sentCount.
    • 可以先找到sentCount,然后调用update进行更新。
    • 是的,我可以这样做。但我想做的是对数据库进行一次 Api 调用。因为,调用 await 到 findOne 然后等待保存修改后的文档会导致性能开销......
    • 更新 your_table SET status = jsonb_set(status, '{sentCount}', (COALESCE(status->>'sentCount','0')::int + 1)::text::jsonb ) 其中 id = 1;你可以试试这个吗?
    • 很高兴它对您有所帮助。 :)
    猜你喜欢
    • 1970-01-01
    • 2017-01-29
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多