我想根據用戶輸入對排序結果進行排序。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中。 –