You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用AQL查询Artifactory所有仓库中唯一的Docker镜像列表

Artifactory AQL查询唯一Docker镜像列表调整方案

你当前查询返回重复记录的核心原因是每个Docker标签都会对应一份独立的manifest.json文件,查询manifest.json的结果天然是每个标签一条数据,要获取去重后的唯一镜像列表,直接在原有AQL语句基础上增加聚合分组逻辑即可,无需额外处理返回结果。


调整后的完整AQL语句

items.find(
  {
    "$and":[
      {"name":{"$eq":"manifest.json"}},
      {"@docker.manifest":{"$match":"*"}},
      {"$rf":[
        {"$or":[
          {"property.key":{"$eq":"docker.manifest"}},
          {"property.key":{"$eq":"docker.repoName"}}
        ]}
      ]}
    ]
  }
).
include("repo","modified","property.value","property.key").
aggregate(
  [
    "$group": {
      "_id": {
        "repo": "$repo",
        "image_name": "$@docker.repoName"
      },
      "tag_count": {"$sum": 1},
      "last_modified": {"$max": "$modified"}
    }
  ]
).
limit(1500)

逻辑说明

  • 分组维度_id设置为所属仓库(repo) + 镜像名称(docker.repoName属性),确保同一镜像的所有标签被分到同一组,天然实现去重
  • 聚合字段tag_count通过$sum函数统计每组内的记录数,也就是该镜像的标签总数
  • 聚合字段last_modified通过$max函数取每组内最大的修改时间,也就是镜像最后更新时间
  • 简化了include的字段,只保留聚合需要的字段,大幅提升查询效率

低版本兼容方案

如果你使用的Artifactory版本不支持AQL聚合功能,可保留原有查询语句,拿到返回结果后自行遍历处理:

  • 遍历所有记录,提取每条的repo和docker.repoName属性值作为唯一键
  • 对相同唯一键的记录做去重,累计计数得到标签数,取最大的修改时间即可

内容的提问来源于stack exchange,提问作者Alex V

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:27:02