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

how to update few fields of jsonb in golang cockroachdb

我在 cockroachdb 中有 table 如下:

         key        |                          value                           
+-------------------+---------------------------------------------------------+
  <host_ipa>        | {“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', ::string, ‘university', ::string) WHERE key = "
    _, err = db.Exec(sqlCmd, newDegree, newUniversity, host)

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

UPDATE myTable SET value = jsonb_set(value, '{degree}', ::text) WHERE key = 

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

UPDATE myTable SET value = jsonb_set(jsonb_set(value, '{degree}', ::text), '{university}', ::text) WHERE key = 

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

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