Я использую Hyperledger Fabric с CouchDB (версия 2.2.0, которая поставляется с образом докера hyperledger / fabric-couchdb).Существует ограничение на Fabric, которое не позволяет указывать массив сортировки для запросов манго, поэтому его следует выполнять с помощью индексов.
Проблема, с которой я сталкиваюсь, заключается в том, что независимо от того, задаю ли я сортировку «asc» или«desc» для полей индекса, результаты запроса всегда располагаются в одном и том же порядке.
Индекс, который я пытаюсь создать (также я бы предпочел использовать assetType в качестве частичного селектора индекса, но также не имел успеха):
{
"index": {
"fields": [
{"assetType": "desc"},
{"originalCustomer.document":"desc"},
{"transactionDate":"desc"}
]
},
"ddoc": "date-index",
"name": "date-index",
"type": "json"
}
Запрос, который я выполняю
{
"selector": {
"assetType": "receivable",
"originalCustomer.document": "1",
"transactionDate": {
"$gt":"1900-01-01"
}
},
"use_index": ["date-index"]
}
_explain result
{
"dbname": "testdb",
"index": {
"ddoc": "_design/date-index",
"name": "date-index",
"type": "json",
"def": {
"fields": [{"assetType": "asc"},{"originalCustomer.document":"asc"},{"transactionDate": "asc"}]
}
},
"selector": {
"$and": [
{"assetType": {"$eq": "receivable"}},
{"originalCustomer.document": {"$eq": "1"}},
{"transactionDate": {"$gt": "1900-01-01"}}
]
},
"opts": {
...
},
"limit": 25,
"skip": 0,
"fields": "all_fields",
"mrargs": {
"include_docs": true,
"view_type": "map",
"reduce": false,
"start_key": [
"receivable",
"1",
"1900-01-01"
],
"end_key": [
"receivable",
"1",
"<MAX>"
],
"direction": "fwd",
"stable": false,
"update": true,
"conflicts": "undefined"
}
}
один и тот же _find результат будет получен независимо от того, использую ли я "asc" или"desc" в индексе.Я ожидаю, что транзакция «Дата 2019-01-02» будет первой в списке, учитывая нисходящий порядок (для краткости я удалил несвязанные поля)
{
"docs": [
{
"assetType": "receivable",
"originalCustomer": {"document": "1"},
"transactionDate": "2019-01-01"
},
{
"assetType": "receivable",
"originalCustomer": {"document": "1"},
"transactionDate": "2019-01-01"
},
{
"assetType": "receivable",
"originalCustomer": {"document": "1"},
"transactionDate": "2019-01-01"
},
{
"assetType": "receivable",
"originalCustomer": {"document": "1"},
"transactionDate": "2019-01-02"
},
{
"assetType": "receivable",
"originalCustomer": {"document": "1"},
"transactionDate": "2019-01-02"
}
],
"bookmark": "..."
}