登录
首页 >  Golang >  Go问答

如何更新golang cockroachdb中jsonb的几个字段

来源:stackoverflow

时间:2024-04-12 13:27:34 148浏览 收藏

本篇文章向大家介绍《如何更新golang cockroachdb中jsonb的几个字段》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。

问题内容

我在 cockroachdb 中有如下表:

         key        |                          value                           
+-------------------+---------------------------------------------------------+
          | {“student_name": “john", “degree": “bachelors”, “university”: “ku”, “company”: “abc"}  

现在我只想更新 jsonb 的两个键 - degreeuniversity。我该怎么做?

我有一个解决方案,但需要提供所有四个字段。

这是我在 golang 中的内容:

sqlcmd := fmt.sprintf(" update %v set value = json_object('{%v, %v, %v, %v}'::string[], '{%v, %v, %v, %v}'::string[]) where key = '%v' ",
        mytable,
        strconv.quote("student_name”),
        strconv.quote("degree"),
        strconv.quote(“university”),
        strconv.quote("company"),
        strconv.quote(student),
        strconv.quote(newdegree),
        strconv.quote(newuniversity),
        strconv.quote(company),
        host)
    db, err := sql.open(dbdriver, dbconnstr)
    _, err = db.exec(sqlcmd)

基于@bergi的工作解决方案:

db, err := sql.Open(dbDriver, DBConnStr)    
    sqlCmd := "UPDATE " + myTable + " SET value = value || jsonb_build_object(‘degree', $1::string, ‘university', $2::string) WHERE key = $3"
    _, err = db.Exec(sqlCmd, newDegree, newUniversity, host)

解决方案


要更新 jsonb 对象的各个属性,请使用 jsonb_set

update mytable set value = jsonb_set(value, '{degree}', $1::text) where key = $2

您可以嵌套调用来执行多次更新:

update mytable set value = jsonb_set(jsonb_set(value, '{degree}', $1::text), '{university}', $2::text) where key = $3

或者,您也可以简单地使用 the || operator 将新值合并到对象中:

UPDATE myTable SET value = value || jsonb_build_object('degree', $1::text, 'university', $2::text) WHERE key = $3

好了,本文到此结束,带大家了解了《如何更新golang cockroachdb中jsonb的几个字段》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>