如何使用 Artifactory 查询语言进行逆向查询?
How to inverse query using Artifactory Query Language?
在 Artfactory 中,我有一个“回购”属性列表,其中一些带有“路径”属性。我需要找到所有与这些属性不匹配的项目。我想知道是否有一种方法可以构建我的逻辑,以便可以在一个查询中完成。
这是我目前的错误逻辑:
curl -u $credentials \
-X POST https://my-artifactory-server.com/artifactory/api/search/aql \
-H content-type:text/plain -d 'items.find({
"$and": [
{"repo" : {"$neq" : "top_level_directory"}},
{
"$and": [
{"repo" : {"$neq" : "other_top_level_directory"}},
{"path" : {"$nmatch" : "sub_directory/*"}}
]
}
]
}).include("repo","path","name","size","modified")'
问题在于,虽然“repo”属性 是唯一的,但“路径”属性 不是。因此,所有子目录都将从查询结果中排除。
是的。 AQL 就像一个逻辑子句,因此我们可以将其结构化。
我假设以下是原始查询:
{
"$or": [
{ "repo": { "$eq": "top_level_directory" } },
{
"$and": [
{ "repo": { "$eq": "other_top_level_directory" } },
{ "path": { "$match": "sub_directory/*" } }
]
}
]
}
A - repo == top_level_directory
B - repo == other_top_level_directory
C - path =~ sub_directory/*
Original query:
A ∨ (B ∧ C)
Inversion:
¬(A ∨ (B ∧ C))
<=> (De Morgan)
¬A ∧ ¬(B ∧ C))
<=> (De Morgan)
¬A ∧ (¬B ∨ ¬C))
并推导出以下查询:
{
"$and": [
{ "repo": { "$neq": "top_level_directory" } },
{
"$or": [
{ "repo": { "$neq": "other_top_level_directory" } },
{ "path": { "$nmatch": "sub_directory/*" } }
]
}
]
}
在 Artfactory 中,我有一个“回购”属性列表,其中一些带有“路径”属性。我需要找到所有与这些属性不匹配的项目。我想知道是否有一种方法可以构建我的逻辑,以便可以在一个查询中完成。
这是我目前的错误逻辑:
curl -u $credentials \
-X POST https://my-artifactory-server.com/artifactory/api/search/aql \
-H content-type:text/plain -d 'items.find({
"$and": [
{"repo" : {"$neq" : "top_level_directory"}},
{
"$and": [
{"repo" : {"$neq" : "other_top_level_directory"}},
{"path" : {"$nmatch" : "sub_directory/*"}}
]
}
]
}).include("repo","path","name","size","modified")'
问题在于,虽然“repo”属性 是唯一的,但“路径”属性 不是。因此,所有子目录都将从查询结果中排除。
是的。 AQL 就像一个逻辑子句,因此我们可以将其结构化。 我假设以下是原始查询:
{
"$or": [
{ "repo": { "$eq": "top_level_directory" } },
{
"$and": [
{ "repo": { "$eq": "other_top_level_directory" } },
{ "path": { "$match": "sub_directory/*" } }
]
}
]
}
A - repo == top_level_directory
B - repo == other_top_level_directory
C - path =~ sub_directory/*
Original query:
A ∨ (B ∧ C)
Inversion:
¬(A ∨ (B ∧ C))
<=> (De Morgan)
¬A ∧ ¬(B ∧ C))
<=> (De Morgan)
¬A ∧ (¬B ∨ ¬C))
并推导出以下查询:
{
"$and": [
{ "repo": { "$neq": "top_level_directory" } },
{
"$or": [
{ "repo": { "$neq": "other_top_level_directory" } },
{ "path": { "$nmatch": "sub_directory/*" } }
]
}
]
}