Я пытаюсь найти самую последнюю (или самую раннюю, в зависимости от оператора сравнения) версию пакета RPM ( бит RPM важен ).Я использую AQL-запрос, похожий на этот:
items.find(
{ "$and" : [
{ "@rpm.metadata.name": { "$eq": "awesome_package"}},
{ "@rpm.metadata.version": { "$gte": "19.300.0.58"}} ]
})
.include("@rpm.metadata.version")
.sort( { "$asc": [ "name" ]})
Как уже ответил Artifactory KnowledgeBase, невозможно отсортировать по свойствам , поэтому вместо простой сортировки по @rpm.metadata.version
ипервый лучший результат с использованием .limit(1)
Я должен использовать условие свойства в предложении find
.
Похоже, что встроенное сравнение Artifactory является чисто лексикографическим, поэтому для запроса выше я получаю следующий результат:
{
"results" : [ {
"repo" : "yum-private-local",
"path" : "some/path",
"name" : "awesome_package-19.300.0.9-1.noarch.rpm",
"properties" : [ {
"key" : "rpm.metadata.version",
"value" : "19.300.0.9"
} ]
},{
"repo" : "yum-private-local",
"path" : "some/path",
"name" : "awesome_package-19.300.0.58-0.noarch.rpm",
"properties" : [ {
"key" : "rpm.metadata.version",
"value" : "19.300.0.58"
} ]
},{
"repo" : "yum-private-local",
"path" : "some/path",
"name" : "awesome_package-19.300.0.59-0.noarch.rpm",
"properties" : [ {
"key" : "rpm.metadata.version",
"value" : "19.300.0.59"
} ]
} ],
"range" : {
"start_pos" : 0,
"end_pos" : 3,
"total" : 3
}
}
Этот результат включает версию 19.300.0.9, которая, согласно спецификации RPM , старше, чем я ищу (> = 19.300.0.58) и не должнабыть включенным в результаты, но Artifactory, тем не менее, находит его, скорее всего, из-за лексикографического сравнения поиска.
Также обратите внимание на порядок результатов, который действительно использует числовую сортировку (версия "19.300.0.9" предшествует "19.300.0.58" и "19.300.0.59").
Вопрос: Можно ли заставить Artifactory использовать числовое ( SemVer ) сравнение в критериях поиска?Если нет, есть ли другой способ исключить не относящиеся к делу версии из списка результатов?