From f2c43705840f9046787a69dee5340947adcf320d Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Tue, 14 Dec 2021 14:58:53 +0100 Subject: [PATCH] Fix meta field mapping when computing fields for projections. Related to: #3894 --- .../data/mongodb/core/QueryOperations.java | 1 + .../data/mongodb/core/convert/QueryMapper.java | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/QueryOperations.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/QueryOperations.java index 5bf6226bd..a0a7c6a70 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/QueryOperations.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/QueryOperations.java @@ -302,6 +302,7 @@ class QueryOperations { mappedFields = queryMapper.getMappedFields(fields, entity); } else { mappedFields = propertyOperations.computeMappedFieldsForProjection(projection, fields); + mappedFields = queryMapper.addMetaAttributes(mappedFields, entity); } if (entity.hasTextScoreProperty() && mappedFields.containsKey(entity.getTextScoreProperty().getFieldName()) 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 d97070aab..a360b8be9 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 @@ -240,6 +240,18 @@ public class QueryMapper { return target; } + /** + * Adds missing {@code $meta} representation if required. + * + * @param source must not be {@literal null}. + * @param entity can be {@literal null}. + * @return never {@literal null}. + * @since 3.4 + */ + public Document addMetaAttributes(Document source, @Nullable MongoPersistentEntity entity) { + return mapMetaAttributes(source, entity, MetaMapping.FORCE); + } + private Document mapMetaAttributes(Document source, @Nullable MongoPersistentEntity entity, MetaMapping metaMapping) {