1

我正在尝试查找 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 已经回答的那样,不可能对 properties 进行排序,因此,我必须在子句中使用 property 条件,而不是仅仅使用排序@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 spec,该版本比我正在搜索的版本 (>= 19.300.0.58) 旧,不应包含在结果中,但 Artifactory 仍然找到它,很可能是由于它的搜索比较是字典式的。

还要注意结果的排序,这似乎使用数字排序(版本“19.300.0.9”在“19.300.0.58”和“19.300.0.59”之前)。

问题:是否可以强制 Artifactory在搜索条件中使用数字( SemVer )比较?如果没有,有没有其他方法可以从结果列表中排除不相关的版本?

4

1 回答 1

1

虽然不符合所要求的内容,但如果由创建的字段完成,而不是名称排序也会有所帮助。

created:
于 2019-04-01T11:41:12.720 回答