У меня есть набор с тремя ячейками (PK, cat_id и data). Индекс списка применяется к cat_id. Я могу выбрать запись по запросу:
SELECT * FROM test.myset IN LIST where cat_id = '1'
Это работает нормально для меня. Теперь мне нужно удалить эту запись в том же состоянии. Но, как я прочитал, PK необходимо удалить любую запись. В моем случае у меня есть cat_id, чтобы удалить эту запись.
Помогите мне удалить эту запись, используя элемент bin, а не PK. Я использую PHP для этого. AQL также работает для меня.
Вы бы использовали асинхронный фоновый запрос, который применяет крошечный (запись UDF) Функция Lua для каждой записи, соответствующей предикату этого запроса. В клиенте PHP вы бы использовали queryApply () метод для этого.
Эта функция Lua просто говорит «умереть»:
function del_rec(rec)
aerospike:remove(rec)
end
Я использовал Справочник по Lua UDF API для этой «сложной» функции, в основном аэрокосмический объект ссылка. Если вы хотите сделать больше логики, например, проверить другие корзины, вы бы использовали запись методы. Там больше информации о UDFs а также разработка записей UDF на веб-сайте Aerospike.
Однажды ты зарегистрировать модуль UDF (файл, содержащий эту функцию) с кластером, вы можете вызвать его из своего кода 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();
}
Других решений пока нет …