登录
首页 >  Golang >  Go问答

在Aerospike中更新特定bin/列,而非全部

来源:stackoverflow

时间:2024-03-17 21:57:30 479浏览 收藏

在 Aerospike 中更新特定 bin 时,默认行为是使用 UPDATE 策略,即更新或插入。但是,如果旧值不存在,则会导致现有数据的丢失。为了避免这种情况,可以使用 RecordExistsAction 策略,它允许用户指定当旧值不存在时的操作。

问题内容

我有以下结构 -

type user struct {
    id string `json:"id"`
    name string `json:"name"`
    email string `json:"email"`
    password string `json:"passwprd"`
    confirmed int `json:"confirmed"`
    confirmcode string `json:"confirmcode"`
    createdat time.time
    updatedat time.time
}

现在,每当我插入数据时,一切都很好,但是每当我更新特定 bin confirmedconfirmcode 时,我的所有其他数据也会被替换为空白值。

这是我用于更新的代码 -

t := time.Now()
u := User{
    Confirmed: 1,
    UpdatedAt: t,
}
key, err := as.NewKey("foobar", "users", "1")
if err != nil {
    ctx.StatusCode(iris.StatusBadRequest)
    ctx.JSON(map[string]string{"error": "Can't update key! Try again " + err.Error()})
    return
}
err = client.PutObject(nil, key, &u)
if err != nil {
    ctx.StatusCode(iris.StatusBadRequest)
    ctx.JSON(map[string]string{"error": "Can't Update object! Try again" + err.Error()})
    return
}

如您所见,在进行更新时,我只提供了结构体的 2 个字段。

这样做,它会删除除上述用于更新的 2 个数据之外的所有旧的现有数据。

在 aerospike 中进行更新时是否需要再次提供“旧值”?


解决方案


查看 RecordExistsAction 策略:https://godoc.org/github.com/aerospike/aerospike-client-go#RecordExistsAction

您应该能够使用 UPDATE(默认),即“更新或插入”,除非您已用 REPLACE 覆盖它?

以上就是《在Aerospike中更新特定bin/列,而非全部》的详细内容,更多关于的资料请关注golang学习网公众号!

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