我有脚本,它可以正常工作,但是我必须对其进行更新。脚本现在可以添加项目,而无需检查是否存在。
function put_page(rec, id, val)
local l = rec['h']
if l==nil then l = list() rec['id'] = id end
list.append(l, val)
rec['h'] = l
if aerospike:exists(rec) then aerospike:update(rec) else aerospike:create(rec) end
end
我尝试用list.iterator(l)中的for值遍历列表,如果value〜= val追加项,但是没有用。 函数中的ID为Solr document_id,val为users_id。我从aerospike得到了示例对象:(('contextChannel','ContextChannel',None,bytearray(b'E \ xfb \ xa3 \ xd0 \ r \ xd6 \ r \ J @ f \ xa8 \ xf6> y!\ xd18 = \ x9b')),{'ttl':2592000,'gen':8},{'id':'ALKSD4EW','h':[]})
更新 我尝试了不同的变体,这是可行的:
function put_page(rec, id, val)
local l = rec['h']
local count = 0
if l==nil then l = list() rec['id'] = id end
for value in list.iterator(l) do
if (value ~= val) then count = count + 1 end
end
if (list.size(l) == count) then list.append(l, val) end
rec['h'] = l
if aerospike:exists(rec) then aerospike:update(rec) else aerospike:create(rec) end
end
答案 0 :(得分:1)
请勿为List API操作中存在的内容创建UDF。 UDF的效果不佳,也无法扩展。
您可以在没有UDF的情况下执行此操作。这是一个使用Python client进行相同操作的示例。
[^\s]
我在rbotzer/aerospike-cdt-examples有一个类似的例子。