2016-07-12 9 views
1

Kann mir bitte jemand zeigen, wie man einen Aerospike LLIST bin nicht mit dem Schlüssel filtert und das ganze Ergebnis mit PHP zurückgibt.Filterung Aerospike LLIST

In meinem Fall die Mülleimer 'Notizen' enthält viele Zeilen von Schlüssel, Titel, desc & Kategorie. Ich kann alle Zeilen mit dem folgenden Code abrufen, aber Ich muss einen Filter für die Kategorie durchführen und die Ergebnisse von nur denen innerhalb derselben Kategorie abrufen. Wenn udf benötigt wird, bitte helfen Sie mir den UDF-Code zu zeigen und wie man den Filter anwendet, um die Ergebnisse zu erhalten.

$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); 

Antwort

0

Verwalten der UDF wie folgt zu ändern und es funktioniert.

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 

Ausgeführt von

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

LList.scan Die Methode hat ein optionales Modul Name, Funktion Name Parameterpaar, so dass Sie eine Lua Funktion aufrufen, jedes Element zu filtern.

Es gibt eine example PHP script mit dem Kunden Repo zur Verfügung gestellt, die ein example Lua Modul ruft:

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 

von

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