代码之家  ›  专栏  ›  技术社区  ›  Lambda killed App

更新特定的bin/列,而不是aerospeck中的Table/set

  •  1
  • Lambda killed App  · 技术社区  · 6 年前

    我有以下结构-

    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 Confirmed &安培; ConfirmCode ,我的所有其他数据也将替换为空值。

    这是代码,我用它来更新-

    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个。

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

    1 回复  |  直到 6 年前
        1
  •  3
  •   pgupta    6 年前

    看看RealDististsAcc方针: https://godoc.org/github.com/aerospike/aerospike-client-go#RecordExistsAction

    您应该能够使用UPDATE(默认值)即“UPDATE or insert”,除非您已经用REPLACE覆盖了它?