Skip to content

Commit a3ef9b5

Browse files
sharmashashank342mp911de
authored andcommitted
DATAMONGO-2287 - Add support for $in aggregation pipeline operator.
Original pull request: #760.
1 parent bb280bd commit a3ef9b5

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/ArrayOperators.java

+24
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
*
3434
* @author Christoph Strobl
3535
* @author Mark Paluch
36+
* @author Shashank Sharma
3637
* @since 1.0
3738
*/
3839
public class ArrayOperators {
@@ -1442,6 +1443,7 @@ public Zip zip(Object... arrays) {
14421443
* {@link AggregationExpression} for {@code $in}.
14431444
*
14441445
* @author Christoph Strobl
1446+
* @author Shashank Sharma
14451447
*/
14461448
public static class In extends AbstractAggregationExpression {
14471449

@@ -1496,6 +1498,28 @@ public In containsValue(Object value) {
14961498
};
14971499
}
14981500

1501+
/**
1502+
* Support for Aggregation In Search an Element in List of Objects to Filter Start creating {@link In}.
1503+
*
1504+
* @author Shashank Sharma
1505+
* @param elementList must not be {@literal null}.
1506+
* @return
1507+
*/
1508+
public static InBuilder arrayOf(final List<Object> elementList) {
1509+
1510+
Assert.notNull(elementList, "Elements must not be null!");
1511+
1512+
return new InBuilder() {
1513+
1514+
@Override
1515+
public In containsValue(Object value) {
1516+
1517+
Assert.notNull(value, "Value must not be null!");
1518+
return new In(Arrays.asList(value, elementList));
1519+
}
1520+
};
1521+
}
1522+
14991523
/**
15001524
* @author Christoph Strobl
15011525
*/

spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/ArrayOperatorsUnitTests.java

+9
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
* Unit tests for {@link ArrayOperators}
3030
*
3131
* @author Christoph Strobl
32+
* @author Shashank Sharma
3233
* @currentRead Royal Assassin - Robin Hobb
3334
*/
3435
public class ArrayOperatorsUnitTests {
@@ -61,4 +62,12 @@ public void toArrayWithArgumentList() {
6162
assertThat(ArrayToObject.arrayToObject(source).toDocument(Aggregation.DEFAULT_CONTEXT))
6263
.isEqualTo(Document.parse("{ $arrayToObject: [ [ \"king\", \"shrewd\"], [ \"prince\", \"verity\" ] ] } "));
6364
}
65+
66+
@Test // DATAMONGO-2287
67+
public void inArrayAggregationWithArgumentList() {
68+
69+
assertThat(ArrayOperators.In.arrayOf(Arrays.asList("Shashank", "Sharma")).containsValue("$userName")
70+
.toDocument(Aggregation.DEFAULT_CONTEXT))
71+
.isEqualTo(Document.parse("{ \"$in\" : [\"$userName\", [\"Shashank\", \"Sharma\"]] }"));
72+
}
6473
}

0 commit comments

Comments
 (0)