更新特定bin / column,而不是Aerospike中的Table / set中的全部

时间:2018-07-28 10:11:02

标签: go aerospike

我有以下结构-

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
}

如您所见,在执行Update时,我仅提供结构的2个字段。

这样做,它会擦除​​所有用于更新的上述两个数据以外的所有旧数据。

在Aerospike中进行更新时,我也需要再次提供“旧值”吗?

1 个答案:

答案 0 :(得分:3)

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

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