Фильтрующий аэроспайк LLIST

Может кто-нибудь, пожалуйста, покажите мне, как фильтровать корзину Aerospike LLIST не по ключу и вернуть весь результат с помощью PHP.

В моем случае корзина ‘notes’ содержит много строк: key, title, desc & категория. Я могу получить все строки, используя следующий код, но
Мне нужно сделать фильтр по категории и получить результаты только тех, кто в той же категории. Если вам нужен udf, помогите мне показать код udf и узнать, как применить фильтр для получения результатов.

$db = new Aerospike($config, false);<br/>
$key = $db->initKey('mynamespace', 'myset', $userid);<br/>
$list = new \Aerospike\LDT\LList($db, $key, 'notes');<br/>
$status = $list->scan($results);

1

Решение

LList.scan Метод имеет необязательное имя модуля, пару параметров имени функции, что позволяет вам вызывать функцию Lua для фильтрации каждого элемента.

Там есть пример PHP-скрипта предоставляется клиентского репо, который вызывает пример Lua модуль:

function keyfilters.even_filter(element)
local remainder = -1
if type(element) == "number" then
remainder = element % 2
elseif (getmetatable(element) == getmetatable(map())) and element['key'] then
remainder = element['key'] % 2
end
if remainder == 0 then
return element
else
return nil
end
end

Вызывается

$rental_history->scan($elements, 'keyfilters', 'even_filter');
2

Другие решения

Удалось изменить UDF следующим образом, и это работает.

  local category_filters = {}
function category_filters.filterBy(element,val)
if element['category'] == val[1] then
return element
else
return nil
end
end
return category_filters

Вызывается

$status = $list->scan($results, 'category_filters', 'filterBy', array($category));
0