我有一个有三个箱子的集合(PK,cat_id和数据)。列表索引应用于cat_id。我可以通过查询选择记录:
SELECT * FROM test.myset IN LIST where cat_id = '1'
这对我来说很好。现在我需要以相同的条件删除此记录。但正如我所知,PK是删除任何记录所必需的。在我的情况下,我有cat_id删除此记录。
帮助我使用bin元素而不是PK删除此记录。我正在使用PHP。 AQL也适合我。
答案 0 :(得分:2)
您将使用异步后台查询,该查询将小(record UDF)Lua函数应用于该查询的谓词匹配的每个记录。在PHP客户端中,您可以使用queryApply()方法。
这个Lua函数简单地说“死”'
function del_rec(rec)
aerospike:remove(rec)
end
我使用了Lua UDF API reference这个'复杂'函数,主要是aerospike object引用。如果你想做更多的逻辑,比如检查其他垃圾箱,你就可以使用record方法了。在Aerospike网站上有UDFs和developing Record UDFs的更多信息。
使用群集register UDF module(包含此功能的文件)后,您可以从PHP代码中调用它:
$where = Aerospike::predicateContains("cat_id", Aerospike::INDEX_TYPE_LIST, 1);
$status = $client->queryApply("test", "mytest", $where, "my_udfs", "del_rec", [], $job_id);
if ($status === Aerospike::OK) {
var_dump("The background job ID is $job_id");
} else {
echo "An error occured while initiating the background query [{$client->errorno()}] ".$client->error();
}