如果已知

时间:2016-07-21 09:38:53

标签: php aerospike

我有一个有三个箱子的集合(PK,cat_id和数据)。列表索引应用于cat_id。我可以通过查询选择记录:

SELECT * FROM test.myset IN LIST where cat_id = '1'

这对我来说很好。现在我需要以相同的条件删除此记录。但正如我所知,PK是删除任何记录所必需的。在我的情况下,我有cat_id删除此记录。

帮助我使用bin元素而不是PK删除此记录。我正在使用PHP。 AQL也适合我。

1 个答案:

答案 0 :(得分:2)

您将使用异步后台查询,该查询将小(record UDF)Lua函数应用于该查询的谓词匹配的每个记录。在PHP客户端中,您可以使用queryApply()方法。

这个Lua函数简单地说“死”'

function del_rec(rec)
    aerospike:remove(rec)
end

我使用了Lua UDF API reference这个'复杂'函数,主要是aerospike object引用。如果你想做更多的逻辑,比如检查其他垃圾箱,你就可以使用record方法了。在Aerospike网站上有UDFsdeveloping 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();
}