déposer et couper une liste dans aerospike udf

J’essaie de supprimer une liste pour créer un système de pagination

local function createMap(postId, paramDate) local m = map { id = postId, date = paramDate }; return m; end function get(rec, binName, from, to) if aerospike:exists(rec) then local l = rec[binName] if (l == nil) then return nil else local length = #l; if (length <= 10 and to = length) then local drop = list.drop(l, from); return drop; else list.sortingm(l, to);--Remove all elements at and beyond a specified position in the List. list.drop(l, from); --Select all elements except the first n elements of the List return l; end end else return nil;--end return empty array end--end else aerospike exists end 

ma liste a cette structure:

 [{"date":"2016-01-02T19:45:00.806Z", "id":"568828bc49017f16659f6978"}, {"date":"2016-01-02T19:44:56.040Z", "id":"568828b849017f16659f6977"},...] 

Il semble que je ne peux pas couper et puis laisser tomber une liste. avec 21 éléments par exemple: il revient d’abord à l’élément 21 à l’élément 13, puis à l’élément 21 à l’élément 4, puis à l’élément 3 à l’élément 1

ma fonction dans node.js est simple pour changer ‘de’ et ‘en’ j’envoie la ‘page’ de l’interface frontale à node.js et utilise cette fonction:

  var skip = 9 * (page -1); var lastIndexToReturn = skip + 9 + 1; 

donc dans la première demande de et à sont ‘0’ et ’10’, puis ‘9’ et ’19’, etc. en utilisant list.sortingm et list.drop, j’ai pensé que je pouvais construire un système de pagination

 function get(rec, binName, from, to) if aerospike:exists(rec) then local l = rec[binName] if (l == nil) then return list()--return empty array else --first index in lua is 1 local length = list.size(l) local pagination = list() if (length < from) then return list() elseif (length >= from and length <=to) then for i=from,length,1 do list.append(pagination, l[i]) end--end for return pagination else for i=from,to,1 do list.append(pagination, l[i]) end--end for return pagination end end else return list();--end return empty array end--end else aerospike exists end --end function 

J'ai fini par coder cette fonction: pour être sûr de ne pas avoir d'erreurs pour l'index de la liste, j'obtiens la taille de la liste et je compare cette taille à la partie que je souhaite paginer pour déterminer ce qu'il faut renvoyer: je n'itère pas sur tout le tableau.

Bien sûr, cela ne fonctionne que si l'enregistrement est une liste. Remarque: assurez-vous que le premier "de" provenant du client est 1, car les tableaux lua commencent à 1.