如何使用golang在aerospike中遍历列表?

时间:2017-10-11 04:04:40

标签: go aerospike

我正在使用列表数据类型(http://www.aerospike.com/docs/guide/cdt-list.html 在使用golang客户的aerospike中。我可以使用ListInsertOp(https://godoc.org/github.com/aerospike/aerospike-client-go#ListInsertOp)在给定条目的列表中插入值。

但是,我想使用ListSetOp(https://godoc.org/github.com/aerospike/aerospike-client-go#ListSetOp)或ListRemoveOp(https://godoc.org/github.com/aerospike/aerospike-client-go#ListRemoveOp

更新/删除给定的列表值

为了做到这一点,我需要一个索引。我怎样才能获得这个索引?有没有办法可以迭代所有列表值并获取索引,然后执行更新或删除操作?

2 个答案:

答案 0 :(得分:2)

假设您有名为List的列表。 我们假设您要将名为value的元素替换为newItem 你可以这样做:

...

for index, item := range List {
     if item == value {
             List[index] = newItem
     }
}

...

在上面的代码段中,index是元素item所在的索引。通过这种方式,您还可以使用value替换列表中特定索引上的元素。

游乐场中的示例示例:https://play.golang.org/p/qOmsY9fbL2

答案 1 :(得分:1)

与往常一样,列表中的项目按其从零开始的整数位置编制索引。 Aerospike还支持负索引,从列表末尾开始倒退。

Lists documentation in the Aerospike

  

元素按整数位置排序。

Lists documentation in the Aerospike's Node.js client

  

列表操作支持负索引。如果索引为负数,则已解析的索引从列表末尾开始向后。

     

索引/范围示例:

     
      
  • 索引0:列表中的第一项。
  •   
  • 索引4:列表中的第五项。
  •   
  • 索引-1:列表中的最后一项。
  •   
  • 索引-3:列表中的倒数第3项。
  •   

Go client source中也提到过。

list := []string{“a”, “b”, “c”, “d”, “e”}
bin := aerospike.NewBin("listbin", list)
err := client.PutBins(nil, key, bin)

// to replace “d”:
op := aerospike.ListSetOp(bin.Name, 3, "replaced")
_, err = client.Operate(nil, key, op)