如果 bin 的元素已知,Aerospike 删除列表中的记录
Aerospike Delete Record in list if element of bin known
我有一组包含三个容器(PK、cat_id 和数据)。列表索引应用于 cat_id 。我可以 select 通过查询记录:
SELECT * FROM test.myset IN LIST where cat_id = '1'
它对我来说很好用。现在我需要按相同条件删除这条记录。但正如我所读到的那样,PK 是删除任何记录所必需的。在我的例子中,我有 cat_id 删除这条记录。
帮我删除这条记录,用bin元素不是PK。我为此使用 PHP。 AQL 也适用于我。
您将使用一个异步后台查询,该查询为此应用了一个微小的(record UDF) Lua function to every record matched by that query's predicate. In the PHP client, you'd use the queryApply() 方法。
这个 Lua 函数简单地说 'die':
function del_rec(rec)
aerospike:remove(rec)
end
我在 Aerospike 网站上使用了 Lua UDF API reference for this 'complex' function, mainly the aerospike object reference. If you wanted to do more logic, like check on other bins, you'd be using the record methods. There's more info on UDFs and 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();
}
我有一组包含三个容器(PK、cat_id 和数据)。列表索引应用于 cat_id 。我可以 select 通过查询记录:
SELECT * FROM test.myset IN LIST where cat_id = '1'
它对我来说很好用。现在我需要按相同条件删除这条记录。但正如我所读到的那样,PK 是删除任何记录所必需的。在我的例子中,我有 cat_id 删除这条记录。
帮我删除这条记录,用bin元素不是PK。我为此使用 PHP。 AQL 也适用于我。
您将使用一个异步后台查询,该查询为此应用了一个微小的(record UDF) Lua function to every record matched by that query's predicate. In the PHP client, you'd use the queryApply() 方法。
这个 Lua 函数简单地说 'die':
function del_rec(rec)
aerospike:remove(rec)
end
我在 Aerospike 网站上使用了 Lua UDF API reference for this 'complex' function, mainly the aerospike object reference. If you wanted to do more logic, like check on other bins, you'd be using the record methods. There's more info on UDFs and 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();
}