2017-01-04 1 views
1

J'essaie d'utiliser AQL pour obtenir une liste de tous les builds non promus à "release". Nos binaires passent par l'intégration d'état -> aat -> version Je veux obtenir une liste de ceux avec l'intégration d'état de promotion et aat mais pas la version.Artifactory AQL recherche des builds sur promotion.status

Un exemple de construction a des statuts:

"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 
} ], 

Cette version est adaptée, peu importe si nous nous sommes fixés:

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

à

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

à la demande:

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

nous obtenons cette réponse:

{ 
"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 
} 

Répondre

1

Si vous n'avez pas besoin d'utiliser des jokers avec $nmatch, vous pouvez utiliser à la place $ne, par exemple:

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

Avec $nmatch, ce qui suit travaillera également :

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

J'ai maintenant essayé vos suggestions mais le problème que nous avons est que la construction correspond à la fois lors de l'utilisation de $ ne et $ nmatch "release" même si la version a la version promotion.status. Je suppose que le problème que nous avons est que nous avons un tableau avec différents statuts de promotion et je ne sais pas comment utiliser AQL pour trouver si le tableau n'inclut pas de statut. –