我正在使用列表数据类型(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)
更新/删除给定的列表值为了做到这一点,我需要一个索引。我怎样才能获得这个索引?有没有办法可以迭代所有列表值并获取索引,然后执行更新或删除操作?
答案 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)