如何在 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
的两个键 - degree
和 university
。我该怎么做?
我有一个解决方案,但需要提供所有四个字段。
这是我在 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 =
我在 cockroachdb 中有 table 如下:
key | value
+-------------------+---------------------------------------------------------+
<host_ipa> | {“student_name": “John", “degree": “Bachelors”, “university”: “KU”, “Company”: “ABC"}
现在我只想更新 jsonb
的两个键 - degree
和 university
。我该怎么做?
我有一个解决方案,但需要提供所有四个字段。
这是我在 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 =