2017-01-04 4 views
1

Я пытаюсь использовать AQL, чтобы получить список всех построений, не предназначенных для «выпуска».Artifactory AQL поиск строится на promotion.status

Наши двоичные файлы проходят через интеграцию состояния -> aat -> release Я хочу получить список тех, у кого есть интеграция с продвижением по службе и айт, но не выпуск.

Одним из примеров построения имеет статусы:

"statuses" : [ { 
    "status" : "integration", 
    "timestamp" : "2016-04-20T08:36:42.009+0000", 
    "user" : "user", 
    "ciUser" : "changes", 
    "timestampDate" : 1461141402009 
}, { 
    "status" : "aat", 
    "repository" : "repo-aat", 
    "timestamp" : "2016-04-20T08:56:11.843+0000", 
    "user" : "user", 
    "ciUser" : "changes", 
    "timestampDate" : 1461142571843 
}, { 
    "status" : "aat", 
    "repository" : "repo-aat", 
    "timestamp" : "2016-04-20T08:58:55.417+0000", 
    "user" : "user", 
    "ciUser" : "changes", 
    "timestampDate" : 1461142735417 
}, { 
    "status" : "aat", 
    "repository" : "repo-aat", 
    "timestamp" : "2016-04-20T09:20:32.619+0000", 
    "user" : "user", 
    "ciUser" : "changes", 
    "timestampDate" : 1461144032619 
}, { 
    "status" : "release", 
    "repository" : "repo-release", 
    "timestamp" : "2016-04-20T09:30:12.143+0000", 
    "user" : "user", 
    "ciUser" : "changes", 
    "timestampDate" : 1461144612143 
}, { 
    "status" : "release", 
    "repository" : "repo-release", 
    "timestamp" : "2016-04-20T09:40:50.595+0000", 
    "user" : "admin", 
    "ciUser" : "changes", 
    "timestampDate" : 1461145250595 
} ], 

Эта сборка подобран независимо, если мы установили:

{"promotion.status": {"$nmatch":"aat"}} 

в

{"promotion.status": {"$nmatch":"release"}} 
{"promotion.status": {"$nmatch":"integration"}} 

с просьбой:

builds.find({ 
    "$and" : [ 
    {"name": {"$match": "test"}}, 
    {"created": {"$lt": "2016-12-01"}}, 
    {"promotion.status": {"$nmatch":"release"}} 
    ] 
}).include("promotion.status").limit(10) 

мы получаем такой ответ:

{ 
"results" : [ { 
    "build.created" : "2016-04-20T10:12:46.905Z", 
    "build.created_by" : "test", 
    "build.modified" : "2016-04-20T11:45:12.309Z", 
    "build.modified_by" : "admin", 
    "build.name" : "user", 
    "build.number" : "2551", 
    "build.promotions" : [ { 
    "build.promotion.status" : "aat" 
    }, { 
    "build.promotion.status" : "integration" 
    } ], 
    "build.url" : "URL" 
} ], 
"range" : { 
    "start_pos" : 0, 
    "end_pos" : 1, 
    "total" : 1, 
    "limit" : 10 
} 

ответ

1

Если вам не нужно использовать специальные символы с $nmatch, вы можете использовать $ne вместо этого, например:

builds.find({ 
    "$and" : [ 
    {"name": {"$match": "test"}}, 
    {"created": {"$lt": "2016-12-01"}}, 
    {"promotion.status": {"$ne":"release"}} 
    ] 
}).include("promotion.status").limit(10) 

С $nmatch, следующие будут работать :

builds.find({ 
    "$and" : [ 
    {"name": {"$match": "test"}}, 
    {"created": {"$lt": "2016-12-01"}}, 
    {"promotion.status": {"$nmatch":"releas*"}} 
    ] 
}).include("promotion.status").limit(10) 
+0

Я уже пробовал свои предложения, но проблема заключается в том, что сборки соответствуют как при использовании $ ne, так и в $ nmatch «релиз», даже несмотря на то, что сборка имеет раскрутку. Я предполагаю, что проблема заключается в том, что у нас есть массив с разными статусами продвижения, и я не знаю, как использовать AQL, чтобы определить, не содержит ли массив массив. –

 Смежные вопросы

  • Нет связанных вопросов^_^