我想根据用户输入对排序结果进行排序。ArangoDB - 使用自定义函数对aql进行排序结果
可以说我有sort
对象可能看起来像这样的:
var sort = {createdAt: -1}
或像这样:
var sort = {createdAt: 1, name: 1}
我有查询,看起来像这样:
FOR f in [{createdAt: 123, name: 'BBB'},{createdAt: 2000, name: 'ZZZ'}, {createdAt: 2000, name: 'BBB'}]
SORT f.createdAt DESC
RETURN f
它工作正常。 但我想按用户排序对象中传递的字段排序结果。 我添加了自定义功能阿朗戈:
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(', ') : '';
})
);
,但是当我使用这种方式不会在所有的工作。结果没有以任何方式排序:
FOR f in [{createdAt: 123, name: 'BBB'},{createdAt: 2000, name: 'ZZZ'}, {createdAt: 2000, name: 'BBB'}]
SORT CUSTOM::FILTERING::SORT_STRING(${sort}, 'f')
RETURN f
如何根据不同的输入参数对结果进行排序?
你有没有看过在ArangoDB内的Foxx Microservices?这是它们的完美应用,让Foxx提供一个REST API,然后用户可以提供Sort,PageNum,PageSize,Query属性,Foxx REST API将为您提供。 –
@DavidThomas你能给我一些实现它的例子吗? – MatiK
看看[这个答案](https://stackoverflow.com/questions/42427063/sending-http-post-request-from-node-to-foxx-service-arangodb/42451340#42451340)我提供了一个如何设置Foxx微服务来响应REST API请求的示例。您可以允许调用者通过路径,查询字符串或主体提供其他查询参数,然后让您的代码调用适当的查询。如何编写Foxx Microservice不在这个问题的范围内,但它遵循Node.js风格的格式,并且在线有很多示例,特别是在github.com中。 –