Skip to content

Commit db232c3

Browse files
committed
MAT-8638: Use $elemMatch in test case validation status queries.
The $elemMatch operator is used to specify multiple criteria on an array of embedded documents such that at least one embedded document satisfies all the specified criteria. The previous query did not require a single test case to match all criteria. Instead, it would return the measure document if all criteria were met by one or more test cases combined. (i.e., With two criteria, id and status, the measure would return if test case 1 matched ID and test case 3 matched status.) Signed-off-by: Joseph Kotanchik <joseph.kotanchik@semanticbits.com>
1 parent 7a2c10e commit db232c3

1 file changed

Lines changed: 22 additions & 13 deletions

File tree

src/main/java/cms/gov/madie/measure/repositories/TestCaseRepositoryImpl.java

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,12 @@ public Measure setValidationStatusToPending(String testCaseId, String measureId)
2626
query.addCriteria(
2727
Criteria.where("_id")
2828
.is(measureId)
29-
.and("testCases._id")
30-
.is(testCaseId)
31-
.and("testCases.validationStatus")
32-
.ne(TestCaseValidationStatus.PENDING.toString()));
29+
.and("testCases")
30+
.elemMatch(
31+
Criteria.where("_id")
32+
.is(testCaseId)
33+
.and("validationStatus")
34+
.ne(TestCaseValidationStatus.PENDING.toString())));
3335

3436
Update update = new Update();
3537
update.set("testCases.$.validationStatus", TestCaseValidationStatus.PENDING.toString());
@@ -41,10 +43,15 @@ public Measure setValidationStatusToPending(String testCaseId, String measureId)
4143
@Override
4244
public Measure setValidationStatusToValidating(String testCaseId, String measureId, UUID taskId) {
4345
Query query = new Query();
44-
query.addCriteria(Criteria.where("_id").is(measureId).and("testCases._id").is(testCaseId));
4546
query.addCriteria(
46-
Criteria.where("testCases.validationStatus")
47-
.is(TestCaseValidationStatus.PENDING.toString()));
47+
Criteria.where("_id")
48+
.is(measureId)
49+
.and("testCases")
50+
.elemMatch(
51+
Criteria.where("_id")
52+
.is(testCaseId)
53+
.and("validationStatus")
54+
.is(TestCaseValidationStatus.PENDING.toString())));
4855

4956
Update update = new Update();
5057
update.set("testCases.$.validationStatus", TestCaseValidationStatus.VALIDATING.toString());
@@ -75,12 +82,14 @@ public Measure findAndUpdateValidationResults(
7582
query.addCriteria(
7683
Criteria.where("_id")
7784
.is(measureId)
78-
.and("testCases._id")
79-
.is(testCaseId)
80-
.and("testCases.validationStatus")
81-
.is(TestCaseValidationStatus.VALIDATING.toString())
82-
.and("testCases.validationTaskId")
83-
.is(taskId.toString()));
85+
.and("testCases")
86+
.elemMatch(
87+
Criteria.where("_id")
88+
.is(testCaseId)
89+
.and("validationStatus")
90+
.is(TestCaseValidationStatus.VALIDATING.toString())
91+
.and("testCases.validationTaskId")
92+
.is(taskId.toString())));
8493

8594
Update update = new Update();
8695
update.set(

0 commit comments

Comments
 (0)