diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java index 3d27e20f3..916fe46ef 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java @@ -719,7 +719,7 @@ public class QueryMapper { for (Entry entry : valueDbo.entrySet()) { String key = entry.getKey(); - if ("$nin".equals(key) || "$in".equals(key)) { + if ("$nin".equals(key) || "$in".equals(key) || "$all".equals(key)) { List ids = new ArrayList<>(); for (Object id : (Iterable) valueDbo.get(key)) { ids.add(convertId(id, getIdTypeForField(documentField))); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java index d08f68dbd..8fe9acbe6 100755 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java @@ -1684,6 +1684,18 @@ public class QueryMapperUnitTests { assertThat(mappedObject).isEqualTo("{ 'text' : { $gt : 'gnirps', $in : [ 'atad' ] } }"); } + @Test // GH-4736 + void allOperatorShouldConvertIdCollection() { + + ObjectId oid = ObjectId.get(); + Criteria criteria = new Criteria().andOperator(where("name").isNull().and("id").all(List.of(oid.toString()))); + + org.bson.Document mappedObject = mapper.getMappedObject(criteria.getCriteriaObject(), + context.getPersistentEntity(Customer.class)); + + assertThat(mappedObject).containsEntry("$and.[0]._id.$all", List.of(oid)); + } + class WithSimpleMap { Map simpleMap; }