Je voudrais trier le résultat en fonction de l'entrée de l'utilisateur.ArangoDB - Trier le résultat en aql avec la fonction personnalisée
Disons que je objet sort
qui pourrait ressembler à ceci:
var sort = {createdAt: -1}
ou comme ceci:
var sort = {createdAt: 1, name: 1}
Et j'ai requête qui ressemble à ceci:
FOR f in [{createdAt: 123, name: 'BBB'},{createdAt: 2000, name: 'ZZZ'}, {createdAt: 2000, name: 'BBB'}]
SORT f.createdAt DESC
RETURN f
et ça marche bien. Mais j'aimerais trier le résultat par champ qui est passé dans l'objet de tri par utilisateur. J'ai ajouté la fonction Arango personnalisée:
db.createFunction(
'CUSTOM::FILTERING::SORT_STRING',
String(function (sort, it) {
return sort && Object.keys(sort).length !== 0 && sort.constructor === Object ? Object.keys(sort).map(key => `${it}.${key} ${sort[key] >= 0 ? 'ASC' : 'DESC'}`).join(', ') : '';
})
);
mais quand je l'utilise de cette façon, il ne fonctionne pas du tout. Le résultat n'est pas trié de quelque façon que ce soit:
FOR f in [{createdAt: 123, name: 'BBB'},{createdAt: 2000, name: 'ZZZ'}, {createdAt: 2000, name: 'BBB'}]
SORT CUSTOM::FILTERING::SORT_STRING(${sort}, 'f')
RETURN f
Comment puis-je trier les résultats en fonction de différents arguments d'entrée?
Avez-vous jeté un oeil à Foxx Microservices au sein d'ArangoDB? C'est une application parfaite d'entre eux, laissez Foxx présenter une API REST et ensuite l'utilisateur peut fournir des attributs Sort, PageNum, PageSize, Query et l'API REST de Foxx le fera pour vous. –
@DavidThomas pourriez-vous me donner un exemple de la mettre en œuvre? – MatiK
Jetez un oeil à [cette réponse] (https://stackoverflow.com/questions/42427063/sending-http-post-request-from-node-to-foxx-service-arangodb/42451340#42451340) où j'ai fourni un Exemple de configuration d'un microservice Foxx pour répondre à une demande d'API REST. Vous pouvez autoriser l'appelant à fournir des paramètres de requête supplémentaires via le chemin, la chaîne de requête ou le corps, puis demander à votre code d'appeler les requêtes appropriées. Comment écrire Foxx Microservice est au-delà de la portée de cette question, mais il suit un format de style Node.js et il y a beaucoup d'exemples en ligne, en particulier sur github.com. –