Browse Source

DATAMONGO-2536 - Polishing.

Encapsulate skipResults in AggregationOptions. Reformat code. Add override Javadoc.

Original pull request: #876.
pull/878/head
Mark Paluch 6 years ago
parent
commit
2c1a3cf03e
No known key found for this signature in database
GPG Key ID: 51A00FA751B91849
  1. 8
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java
  2. 19
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java
  3. 4
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AddFieldsOperation.java
  4. 8
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/Aggregation.java
  5. 9
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationOperation.java
  6. 13
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationOptions.java
  7. 4
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationPipeline.java
  8. 11
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/BucketAutoOperation.java
  9. 20
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/BucketOperation.java
  10. 4
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/CountOperation.java
  11. 6
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/DocumentEnhancingOperation.java
  12. 11
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/FacetOperation.java
  13. 21
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/GeoNearOperation.java
  14. 4
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/GraphLookupOperation.java
  15. 8
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/GroupOperation.java
  16. 8
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/LimitOperation.java
  17. 4
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/LiteralOperators.java
  18. 11
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/LookupOperation.java
  19. 11
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/MatchOperation.java
  20. 10
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/MergeOperation.java
  21. 9
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/OutOperation.java
  22. 14
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/ProjectionOperation.java
  23. 8
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/RedactOperation.java
  24. 6
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/ReplaceRootOperation.java
  25. 8
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/SampleOperation.java
  26. 4
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/SetOperation.java
  27. 11
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/SkipOperation.java
  28. 10
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/SortByCountOperation.java
  29. 11
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/SortOperation.java
  30. 12
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/UnsetOperation.java
  31. 13
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/UnwindOperation.java
  32. 160
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/AggregationTests.java
  33. 1
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/ReactiveAggregationTests.java

8
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java

@ -28,6 +28,7 @@ import org.bson.Document;
import org.bson.conversions.Bson; import org.bson.conversions.Bson;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware; import org.springframework.context.ApplicationContextAware;
@ -62,7 +63,6 @@ import org.springframework.data.mongodb.core.QueryOperations.UpdateContext;
import org.springframework.data.mongodb.core.aggregation.Aggregation; import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationOperationContext; import org.springframework.data.mongodb.core.aggregation.AggregationOperationContext;
import org.springframework.data.mongodb.core.aggregation.AggregationOptions; import org.springframework.data.mongodb.core.aggregation.AggregationOptions;
import org.springframework.data.mongodb.core.aggregation.AggregationOptions.ResultOptions;
import org.springframework.data.mongodb.core.aggregation.AggregationResults; import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import org.springframework.data.mongodb.core.aggregation.TypeBasedAggregationOperationContext; import org.springframework.data.mongodb.core.aggregation.TypeBasedAggregationOperationContext;
import org.springframework.data.mongodb.core.aggregation.TypedAggregation; import org.springframework.data.mongodb.core.aggregation.TypedAggregation;
@ -2132,7 +2132,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware,
List<Document> rawResult = new ArrayList<>(); List<Document> rawResult = new ArrayList<>();
Class<?> domainType = aggregation instanceof TypedAggregation ? ((TypedAggregation) aggregation).getInputType() Class<?> domainType = aggregation instanceof TypedAggregation ? ((TypedAggregation<?>) aggregation).getInputType()
: null; : null;
Optional<Collation> collation = Optionals.firstNonEmpty(options::getCollation, Optional<Collation> collation = Optionals.firstNonEmpty(options::getCollation,
@ -2153,10 +2153,10 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware,
aggregateIterable = aggregateIterable.maxTime(options.getMaxTime().toMillis(), TimeUnit.MILLISECONDS); aggregateIterable = aggregateIterable.maxTime(options.getMaxTime().toMillis(), TimeUnit.MILLISECONDS);
} }
if(ResultOptions.SKIP.equals(options.resultOptions())) { if (options.isSkipResults()) {
// toCollection only allowed for $out and $merge if those are the last stages // toCollection only allowed for $out and $merge if those are the last stages
if(aggregation.getPipeline().isOutOrMerge()) { if (aggregation.getPipeline().isOutOrMerge()) {
aggregateIterable.toCollection(); aggregateIterable.toCollection();
} else { } else {
aggregateIterable.first(); aggregateIterable.first();

19
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java

@ -26,7 +26,6 @@ import java.util.*;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.bson.BsonValue; import org.bson.BsonValue;
@ -37,6 +36,7 @@ import org.reactivestreams.Publisher;
import org.reactivestreams.Subscriber; import org.reactivestreams.Subscriber;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware; import org.springframework.context.ApplicationContextAware;
@ -69,7 +69,6 @@ import org.springframework.data.mongodb.core.QueryOperations.UpdateContext;
import org.springframework.data.mongodb.core.aggregation.Aggregation; import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationOperationContext; import org.springframework.data.mongodb.core.aggregation.AggregationOperationContext;
import org.springframework.data.mongodb.core.aggregation.AggregationOptions; import org.springframework.data.mongodb.core.aggregation.AggregationOptions;
import org.springframework.data.mongodb.core.aggregation.AggregationOptions.ResultOptions;
import org.springframework.data.mongodb.core.aggregation.PrefixingDelegatingAggregationOperationContext; import org.springframework.data.mongodb.core.aggregation.PrefixingDelegatingAggregationOperationContext;
import org.springframework.data.mongodb.core.aggregation.TypeBasedAggregationOperationContext; import org.springframework.data.mongodb.core.aggregation.TypeBasedAggregationOperationContext;
import org.springframework.data.mongodb.core.aggregation.TypedAggregation; import org.springframework.data.mongodb.core.aggregation.TypedAggregation;
@ -1006,11 +1005,14 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati
} }
ReadDocumentCallback<O> readCallback = new ReadDocumentCallback<>(mongoConverter, outputType, collectionName); ReadDocumentCallback<O> readCallback = new ReadDocumentCallback<>(mongoConverter, outputType, collectionName);
return execute(collectionName, collection -> aggregateAndMap(collection, pipeline, () -> aggregation.getPipeline().isOutOrMerge(), options, readCallback, return execute(collectionName,
aggregation instanceof TypedAggregation ? ((TypedAggregation) aggregation).getInputType() : null)); collection -> aggregateAndMap(collection, pipeline, aggregation.getPipeline().isOutOrMerge(), options,
readCallback,
aggregation instanceof TypedAggregation ? ((TypedAggregation<?>) aggregation).getInputType() : null));
} }
private <O> Flux<O> aggregateAndMap(MongoCollection<Document> collection, List<Document> pipeline, Supplier<Boolean> isOutOrMerge, private <O> Flux<O> aggregateAndMap(MongoCollection<Document> collection, List<Document> pipeline,
boolean isOutOrMerge,
AggregationOptions options, ReadDocumentCallback<O> readCallback, @Nullable Class<?> inputType) { AggregationOptions options, ReadDocumentCallback<O> readCallback, @Nullable Class<?> inputType) {
AggregatePublisher<Document> cursor = collection.aggregate(pipeline, Document.class) AggregatePublisher<Document> cursor = collection.aggregate(pipeline, Document.class)
@ -1030,11 +1032,8 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati
cursor = cursor.maxTime(options.getMaxTime().toMillis(), TimeUnit.MILLISECONDS); cursor = cursor.maxTime(options.getMaxTime().toMillis(), TimeUnit.MILLISECONDS);
} }
if (ResultOptions.SKIP.equals(options.resultOptions())) { if (options.isSkipResults()) {
if (isOutOrMerge.get()) { return (isOutOrMerge ? Flux.from(cursor.toCollection()) : Flux.from(cursor.first())).thenMany(Mono.empty());
return Flux.from(cursor.toCollection()).map(it -> (O) it);
}
return Flux.from(cursor.first()).thenMany(Mono.empty());
} }
return Flux.from(cursor).concatMap(readCallback::doWith); return Flux.from(cursor).concatMap(readCallback::doWith);

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

@ -99,6 +99,10 @@ public class AddFieldsOperation extends DocumentEnhancingOperation {
return new AddFieldsOperationBuilder(getValueMap()); return new AddFieldsOperationBuilder(getValueMap());
} }
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.DocumentEnhancingOperation#mongoOperator()
*/
@Override @Override
protected String mongoOperator() { protected String mongoOperator() {
return "$addFields"; return "$addFields";

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

@ -645,9 +645,9 @@ public class Aggregation {
/** /**
* Creates a new {@link RedactOperation} that can restrict the content of a document based on information stored * Creates a new {@link RedactOperation} that can restrict the content of a document based on information stored
* within the document itself. * within the document itself.
* *
* <pre class="code"> * <pre class="code">
* *
* Aggregation.redact(ConditionalOperators.when(Criteria.where("level").is(5)) // * Aggregation.redact(ConditionalOperators.when(Criteria.where("level").is(5)) //
* .then(RedactOperation.PRUNE) // * .then(RedactOperation.PRUNE) //
* .otherwise(RedactOperation.DESCEND)); * .otherwise(RedactOperation.DESCEND));
@ -705,6 +705,10 @@ public class Aggregation {
return pipeline.toDocuments(rootContext); return pipeline.toDocuments(rootContext);
} }
/**
* @return the {@link AggregationPipeline}.
* @since 3.0.2
*/
public AggregationPipeline getPipeline() { public AggregationPipeline getPipeline() {
return pipeline; return pipeline;
} }

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

@ -55,7 +55,14 @@ public interface AggregationOperation {
return Collections.singletonList(toDocument(context)); return Collections.singletonList(toDocument(context));
} }
default String operator() { /**
* Return the MongoDB operator that is used for this {@link AggregationOperation}. Aggregation operations should
* implement this method to avoid document rendering.
*
* @return the operator used for this {@link AggregationOperation}.
* @since 3.0.2
*/
default String getOperator() {
return toDocument(Aggregation.DEFAULT_CONTEXT).keySet().iterator().next(); return toDocument(Aggregation.DEFAULT_CONTEXT).keySet().iterator().next();
} }
} }

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

@ -221,11 +221,12 @@ public class AggregationOptions {
} }
/** /**
* @return the {@link ResultOptions} to be used when running the {@link Aggregation}. Never {@literal null}. * @return {@literal true} to skip results when running an aggregation. Useful in combination with {@code $merge} or
* @since 3.0 * {@code $out}.
* @since 3.0.2
*/ */
public ResultOptions resultOptions() { public boolean isSkipResults() {
return resultOptions; return ResultOptions.SKIP.equals(resultOptions);
} }
/** /**
@ -415,7 +416,7 @@ public class AggregationOptions {
* option allows to execute the aggregation without having the cursor return the operation result. * option allows to execute the aggregation without having the cursor return the operation result.
* *
* @return this. * @return this.
* @since 3.0 * @since 3.0.2
*/ */
public Builder skipOutput() { public Builder skipOutput() {
@ -445,7 +446,7 @@ public class AggregationOptions {
/** /**
* @since 3.0 * @since 3.0
*/ */
public enum ResultOptions { private enum ResultOptions {
/** /**
* Just do it!, and do not read the operation result. * Just do it!, and do not read the operation result.

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

@ -26,7 +26,7 @@ import org.springframework.util.Assert;
* The {@link AggregationPipeline} holds the collection of {@link AggregationOperation aggregation stages}. * The {@link AggregationPipeline} holds the collection of {@link AggregationOperation aggregation stages}.
* *
* @author Christoph Strobl * @author Christoph Strobl
* @since 3.1 * @since 3.0.2
*/ */
public class AggregationPipeline { public class AggregationPipeline {
@ -86,7 +86,7 @@ public class AggregationPipeline {
return false; return false;
} }
String operator = pipeline.get(pipeline.size() - 1).operator(); String operator = pipeline.get(pipeline.size() - 1).getOperator();
return operator.equals("$out") || operator.equals("$merge"); return operator.equals("$out") || operator.equals("$merge");
} }

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

@ -15,12 +15,11 @@
*/ */
package org.springframework.data.mongodb.core.aggregation; package org.springframework.data.mongodb.core.aggregation;
import org.bson.Document;
import org.springframework.data.mongodb.core.aggregation.BucketAutoOperation.BucketAutoOperationOutputBuilder; import org.springframework.data.mongodb.core.aggregation.BucketAutoOperation.BucketAutoOperationOutputBuilder;
import org.springframework.data.mongodb.core.aggregation.BucketOperationSupport.OutputBuilder; import org.springframework.data.mongodb.core.aggregation.BucketOperationSupport.OutputBuilder;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.bson.Document;
/** /**
* Encapsulates the aggregation framework {@code $bucketAuto}-operation. <br /> * Encapsulates the aggregation framework {@code $bucketAuto}-operation. <br />
* Bucket stage is typically used with {@link Aggregation} and {@code $facet}. Categorizes incoming documents into a * Bucket stage is typically used with {@link Aggregation} and {@code $facet}. Categorizes incoming documents into a
@ -106,11 +105,15 @@ public class BucketAutoOperation extends BucketOperationSupport<BucketAutoOperat
options.putAll(super.toDocument(context)); options.putAll(super.toDocument(context));
return new Document(operator(), options); return new Document(getOperator(), options);
} }
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#getOperator()
*/
@Override @Override
public String operator() { public String getOperator() {
return "$bucketAuto"; return "$bucketAuto";
} }

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

@ -20,21 +20,19 @@ import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import org.bson.Document;
import org.springframework.data.mongodb.core.aggregation.BucketOperation.BucketOperationOutputBuilder; import org.springframework.data.mongodb.core.aggregation.BucketOperation.BucketOperationOutputBuilder;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.bson.Document;
/** /**
* Encapsulates the aggregation framework {@code $bucket}-operation. <br /> * Encapsulates the aggregation framework {@code $bucket}-operation. <br />
*
* Bucket stage is typically used with {@link Aggregation} and {@code $facet}. Categorizes incoming documents into * Bucket stage is typically used with {@link Aggregation} and {@code $facet}. Categorizes incoming documents into
* groups, called buckets, based on a specified expression and bucket boundaries. <br /> * groups, called buckets, based on a specified expression and bucket boundaries. <br />
*
* We recommend to use the static factory method {@link Aggregation#bucket(String)} instead of creating instances of * We recommend to use the static factory method {@link Aggregation#bucket(String)} instead of creating instances of
* this class directly. * this class directly.
* *
* @see <a href="https://docs.mongodb.org/manual/reference/aggregation/bucket/">https://docs.mongodb.org/manual/reference/aggregation/bucket/</a> * @see <a href=
* "https://docs.mongodb.org/manual/reference/aggregation/bucket/">https://docs.mongodb.org/manual/reference/aggregation/bucket/</a>
* @see BucketOperationSupport * @see BucketOperationSupport
* @author Mark Paluch * @author Mark Paluch
* @since 1.10 * @since 1.10
@ -103,11 +101,15 @@ public class BucketOperation extends BucketOperationSupport<BucketOperation, Buc
options.putAll(super.toDocument(context)); options.putAll(super.toDocument(context));
return new Document(operator(), options); return new Document(getOperator(), options);
} }
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#getOperator()
*/
@Override @Override
public String operator() { public String getOperator() {
return "$bucket"; return "$bucket";
} }
@ -209,8 +211,8 @@ public class BucketOperation extends BucketOperationSupport<BucketOperation, Buc
extends ExpressionBucketOperationBuilderSupport<BucketOperationOutputBuilder, BucketOperation> { extends ExpressionBucketOperationBuilderSupport<BucketOperationOutputBuilder, BucketOperation> {
/** /**
* Creates a new {@link ExpressionBucketOperationBuilderSupport} for the given value, {@link BucketOperation} * Creates a new {@link ExpressionBucketOperationBuilderSupport} for the given value, {@link BucketOperation} and
* and parameters. * parameters.
* *
* @param expression must not be {@literal null}. * @param expression must not be {@literal null}.
* @param operation must not be {@literal null}. * @param operation must not be {@literal null}.

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

@ -49,11 +49,11 @@ public class CountOperation implements FieldsExposingAggregationOperation {
*/ */
@Override @Override
public Document toDocument(AggregationOperationContext context) { public Document toDocument(AggregationOperationContext context) {
return new Document(operator(), fieldName); return new Document(getOperator(), fieldName);
} }
@Override @Override
public String operator() { public String getOperator() {
return "$count"; return "$count";
} }

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

@ -71,8 +71,12 @@ abstract class DocumentEnhancingOperation implements InheritsFieldsAggregationOp
*/ */
protected abstract String mongoOperator(); protected abstract String mongoOperator();
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#getOperator()
*/
@Override @Override
public String operator() { public String getOperator() {
return mongoOperator(); return mongoOperator();
} }

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

@ -20,12 +20,11 @@ import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import org.bson.Document;
import org.springframework.data.mongodb.core.aggregation.BucketOperationSupport.Output; import org.springframework.data.mongodb.core.aggregation.BucketOperationSupport.Output;
import org.springframework.data.mongodb.core.aggregation.ExposedFields.ExposedField; import org.springframework.data.mongodb.core.aggregation.ExposedFields.ExposedField;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.bson.Document;
/** /**
* Encapsulates the aggregation framework {@code $facet}-operation. <br /> * Encapsulates the aggregation framework {@code $facet}-operation. <br />
* Facet of {@link AggregationOperation}s to be used in an {@link Aggregation}. Processes multiple * Facet of {@link AggregationOperation}s to be used in an {@link Aggregation}. Processes multiple
@ -84,11 +83,15 @@ public class FacetOperation implements FieldsExposingAggregationOperation {
*/ */
@Override @Override
public Document toDocument(AggregationOperationContext context) { public Document toDocument(AggregationOperationContext context) {
return new Document(operator(), facets.toDocument(context)); return new Document(getOperator(), facets.toDocument(context));
} }
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#getOperator()
*/
@Override @Override
public String operator() { public String getOperator() {
return "$facet"; return "$facet";
} }

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

@ -16,14 +16,12 @@
package org.springframework.data.mongodb.core.aggregation; package org.springframework.data.mongodb.core.aggregation;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import org.bson.Document; import org.bson.Document;
import org.springframework.data.mongodb.core.query.NearQuery; import org.springframework.data.mongodb.core.query.NearQuery;
import org.springframework.lang.Nullable; import org.springframework.lang.Nullable;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.NumberUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
/** /**
@ -95,25 +93,26 @@ public class GeoNearOperation implements AggregationOperation {
Document command = context.getMappedObject(nearQuery.toDocument()); Document command = context.getMappedObject(nearQuery.toDocument());
if(command.containsKey("query")) { if (command.containsKey("query")) {
command.replace("query", context.getMappedObject(command.get("query", Document.class))); command.replace("query", context.getMappedObject(command.get("query", Document.class)));
} }
if(command.containsKey("collation")) { command.remove("collation");
command.remove("collation");
}
command.put("distanceField", distanceField); command.put("distanceField", distanceField);
if (StringUtils.hasText(indexKey)) { if (StringUtils.hasText(indexKey)) {
command.put("key", indexKey); command.put("key", indexKey);
} }
return new Document(operator(), command); return new Document(getOperator(), command);
} }
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#getOperator()
*/
@Override @Override
public String operator() { public String getOperator() {
return "$geoNear"; return "$geoNear";
} }
@ -130,11 +129,11 @@ public class GeoNearOperation implements AggregationOperation {
List<Document> stages = new ArrayList<>(); List<Document> stages = new ArrayList<>();
stages.add(command); stages.add(command);
if(nearQuery.getSkip() != null && nearQuery.getSkip() > 0){ if (nearQuery.getSkip() != null && nearQuery.getSkip() > 0) {
stages.add(new Document("$skip", nearQuery.getSkip())); stages.add(new Document("$skip", nearQuery.getSkip()));
} }
if(limit != null) { if (limit != null) {
stages.add(new Document("$limit", limit.longValue())); stages.add(new Document("$limit", limit.longValue()));
} }

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

@ -119,11 +119,11 @@ public class GraphLookupOperation implements InheritsFieldsAggregationOperation
graphLookup.put("restrictSearchWithMatch", context.getMappedObject(restrictSearchWithMatch.getCriteriaObject())); graphLookup.put("restrictSearchWithMatch", context.getMappedObject(restrictSearchWithMatch.getCriteriaObject()));
} }
return new Document(operator(), graphLookup); return new Document(getOperator(), graphLookup);
} }
@Override @Override
public String operator() { public String getOperator() {
return "$graphLookup"; return "$graphLookup";
} }

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

@ -429,11 +429,15 @@ public class GroupOperation implements FieldsExposingAggregationOperation {
operationObject.putAll(operation.toDocument(context)); operationObject.putAll(operation.toDocument(context));
} }
return new Document(operator(), operationObject); return new Document(getOperator(), operationObject);
} }
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#getOperator()
*/
@Override @Override
public String operator() { public String getOperator() {
return "$group"; return "$group";
} }

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

@ -49,11 +49,15 @@ public class LimitOperation implements AggregationOperation {
*/ */
@Override @Override
public Document toDocument(AggregationOperationContext context) { public Document toDocument(AggregationOperationContext context) {
return new Document(operator(), Long.valueOf(maxElements)); return new Document(getOperator(), Long.valueOf(maxElements));
} }
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#getOperator()
*/
@Override @Override
public String operator() { public String getOperator() {
return "$limit"; return "$limit";
} }
} }

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

@ -76,6 +76,10 @@ public class LiteralOperators {
super(value); super(value);
} }
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.AbstractAggregationExpression#getMongoMethod()
*/
@Override @Override
protected String getMongoMethod() { protected String getMongoMethod() {
return "$literal"; return "$literal";

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

@ -83,11 +83,15 @@ public class LookupOperation implements FieldsExposingAggregationOperation, Inhe
lookupObject.append("foreignField", foreignField.getTarget()); lookupObject.append("foreignField", foreignField.getTarget());
lookupObject.append("as", as.getTarget()); lookupObject.append("as", as.getTarget());
return new Document(operator(), lookupObject); return new Document(getOperator(), lookupObject);
} }
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#getOperator()
*/
@Override @Override
public String operator() { public String getOperator() {
return "$lookup"; return "$lookup";
} }
@ -173,8 +177,7 @@ public class LookupOperation implements FieldsExposingAggregationOperation, Inhe
Assert.hasText(name, "'As' must not be null or empty!"); Assert.hasText(name, "'As' must not be null or empty!");
as = new ExposedField(Fields.field(name), true); as = new ExposedField(Fields.field(name), true);
return new LookupOperation(from, localField, foreignField, return new LookupOperation(from, localField, foreignField, as);
as);
} }
@Override @Override

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

@ -30,7 +30,8 @@ import org.springframework.util.Assert;
* @author Thomas Darimont * @author Thomas Darimont
* @author Oliver Gierke * @author Oliver Gierke
* @since 1.3 * @since 1.3
* @see <a href="https://docs.mongodb.com/manual/reference/operator/aggregation/match/">MongoDB Aggregation Framework: $match</a> * @see <a href="https://docs.mongodb.com/manual/reference/operator/aggregation/match/">MongoDB Aggregation Framework:
* $match</a>
*/ */
public class MatchOperation implements AggregationOperation { public class MatchOperation implements AggregationOperation {
@ -53,11 +54,15 @@ public class MatchOperation implements AggregationOperation {
*/ */
@Override @Override
public Document toDocument(AggregationOperationContext context) { public Document toDocument(AggregationOperationContext context) {
return new Document(operator(), context.getMappedObject(criteriaDefinition.getCriteriaObject())); return new Document(getOperator(), context.getMappedObject(criteriaDefinition.getCriteriaObject()));
} }
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#getOperator()
*/
@Override @Override
public String operator() { public String getOperator() {
return "$match"; return "$match";
} }
} }

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

@ -100,7 +100,7 @@ public class MergeOperation implements FieldsExposingAggregationOperation, Inher
public Document toDocument(AggregationOperationContext context) { public Document toDocument(AggregationOperationContext context) {
if (isJustCollection()) { if (isJustCollection()) {
return new Document(operator(), into.collection); return new Document(getOperator(), into.collection);
} }
Document $merge = new Document(); Document $merge = new Document();
@ -122,11 +122,15 @@ public class MergeOperation implements FieldsExposingAggregationOperation, Inher
$merge.putAll(whenNotMatched.toDocument(context)); $merge.putAll(whenNotMatched.toDocument(context));
} }
return new Document(operator(), $merge); return new Document(getOperator(), $merge);
} }
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#getOperator()
*/
@Override @Override
public String operator() { public String getOperator() {
return "$merge"; return "$merge";
} }

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

@ -16,7 +16,6 @@
package org.springframework.data.mongodb.core.aggregation; package org.springframework.data.mongodb.core.aggregation;
import org.bson.Document; import org.bson.Document;
import org.springframework.data.mongodb.util.BsonUtils; import org.springframework.data.mongodb.util.BsonUtils;
import org.springframework.lang.Nullable; import org.springframework.lang.Nullable;
import org.springframework.util.Assert; import org.springframework.util.Assert;
@ -211,11 +210,15 @@ public class OutOperation implements AggregationOperation {
$out.append("uniqueKey", uniqueKey); $out.append("uniqueKey", uniqueKey);
} }
return new Document(operator(), $out); return new Document(getOperator(), $out);
} }
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#getOperator()
*/
@Override @Override
public String operator() { public String getOperator() {
return "$out"; return "$out";
} }

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

@ -261,11 +261,15 @@ public class ProjectionOperation implements FieldsExposingAggregationOperation {
fieldObject.putAll(projection.toDocument(context)); fieldObject.putAll(projection.toDocument(context));
} }
return new Document(operator(), fieldObject); return new Document(getOperator(), fieldObject);
} }
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#getOperator()
*/
@Override @Override
public String operator() { public String getOperator() {
return "$project"; return "$project";
} }
@ -1553,7 +1557,7 @@ public class ProjectionOperation implements FieldsExposingAggregationOperation {
final Field aliasedField = Fields.field(alias, this.field.getName()); final Field aliasedField = Fields.field(alias, this.field.getName());
return new OperationProjection(aliasedField, operation, values.toArray()) { return new OperationProjection(aliasedField, operation, values.toArray()) {
/* /*
* (non-Javadoc) * (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.ProjectionOperation.ProjectionOperationBuilder.OperationProjection#getField() * @see org.springframework.data.mongodb.core.aggregation.ProjectionOperation.ProjectionOperationBuilder.OperationProjection#getField()
*/ */
@ -1754,7 +1758,7 @@ public class ProjectionOperation implements FieldsExposingAggregationOperation {
this.expression = expression; this.expression = expression;
} }
/* /*
* (non-Javadoc) * (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.ProjectionOperation.Projection#toDocument(org.springframework.data.mongodb.core.aggregation.AggregationOperationContext) * @see org.springframework.data.mongodb.core.aggregation.ProjectionOperation.Projection#toDocument(org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
*/ */
@ -1882,7 +1886,7 @@ public class ProjectionOperation implements FieldsExposingAggregationOperation {
this.projections = projections; this.projections = projections;
} }
/* /*
* (non-Javadoc) * (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.ProjectionOperation.Projection#toDocument(org.springframework.data.mongodb.core.aggregation.AggregationOperationContext) * @see org.springframework.data.mongodb.core.aggregation.ProjectionOperation.Projection#toDocument(org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
*/ */

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

@ -74,11 +74,15 @@ public class RedactOperation implements AggregationOperation {
*/ */
@Override @Override
public Document toDocument(AggregationOperationContext context) { public Document toDocument(AggregationOperationContext context) {
return new Document(operator(), condition.toDocument(context)); return new Document(getOperator(), condition.toDocument(context));
} }
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#getOperator()
*/
@Override @Override
public String operator() { public String getOperator() {
return "$redact"; return "$redact";
} }

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

@ -86,8 +86,12 @@ public class ReplaceRootOperation implements FieldsExposingAggregationOperation
return new Document("$replaceRoot", new Document("newRoot", getReplacement().toDocumentExpression(context))); return new Document("$replaceRoot", new Document("newRoot", getReplacement().toDocumentExpression(context)));
} }
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#getOperator()
*/
@Override @Override
public String operator() { public String getOperator() {
return "$replaceRoot"; return "$replaceRoot";
} }

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

@ -48,11 +48,15 @@ public class SampleOperation implements AggregationOperation {
*/ */
@Override @Override
public Document toDocument(AggregationOperationContext context) { public Document toDocument(AggregationOperationContext context) {
return new Document(operator(), new Document("size", this.sampleSize)); return new Document(getOperator(), new Document("size", this.sampleSize));
} }
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#getOperator()
*/
@Override @Override
public String operator() { public String getOperator() {
return "$sample"; return "$sample";
} }
} }

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

@ -99,6 +99,10 @@ public class SetOperation extends DocumentEnhancingOperation {
return new FieldAppender(getValueMap()); return new FieldAppender(getValueMap());
} }
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.DocumentEnhancingOperation#mongoOperator()
*/
@Override @Override
protected String mongoOperator() { protected String mongoOperator() {
return "$set"; return "$set";

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

@ -28,7 +28,8 @@ import org.springframework.util.Assert;
* @author Oliver Gierke * @author Oliver Gierke
* @author Christoph Strobl * @author Christoph Strobl
* @since 1.3 * @since 1.3
* @see <a href="https://docs.mongodb.com/manual/reference/operator/aggregation/skip/">MongoDB Aggregation Framework: $skip</a> * @see <a href="https://docs.mongodb.com/manual/reference/operator/aggregation/skip/">MongoDB Aggregation Framework:
* $skip</a>
*/ */
public class SkipOperation implements AggregationOperation { public class SkipOperation implements AggregationOperation {
@ -51,11 +52,15 @@ public class SkipOperation implements AggregationOperation {
*/ */
@Override @Override
public Document toDocument(AggregationOperationContext context) { public Document toDocument(AggregationOperationContext context) {
return new Document(operator(), skipCount); return new Document(getOperator(), skipCount);
} }
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#getOperator()
*/
@Override @Override
public String operator() { public String getOperator() {
return "$skip"; return "$skip";
} }
} }

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

@ -67,19 +67,23 @@ public class SortByCountOperation implements AggregationOperation {
this.groupByField = null; this.groupByField = null;
} }
/* /*
* (non-Javadoc) * (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#toDocument(org.springframework.data.mongodb.core.aggregation.AggregationOperationContext) * @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#toDocument(org.springframework.data.mongodb.core.aggregation.AggregationOperationContext)
*/ */
@Override @Override
public Document toDocument(AggregationOperationContext context) { public Document toDocument(AggregationOperationContext context) {
return new Document(operator(), groupByExpression == null ? context.getReference(groupByField).toString() return new Document(getOperator(), groupByExpression == null ? context.getReference(groupByField).toString()
: groupByExpression.toDocument(context)); : groupByExpression.toDocument(context));
} }
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#getOperator()
*/
@Override @Override
public String operator() { public String getOperator() {
return "$sortByCount"; return "$sortByCount";
} }
} }

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

@ -33,7 +33,8 @@ import org.springframework.util.Assert;
* @author Christoph Strobl * @author Christoph Strobl
* @author Mark Paluch * @author Mark Paluch
* @since 1.3 * @since 1.3
* @see <a href="https://docs.mongodb.com/manual/reference/operator/aggregation/sort/">MongoDB Aggregation Framework: $sort</a> * @see <a href="https://docs.mongodb.com/manual/reference/operator/aggregation/sort/">MongoDB Aggregation Framework:
* $sort</a>
*/ */
public class SortOperation implements AggregationOperation { public class SortOperation implements AggregationOperation {
@ -74,11 +75,15 @@ public class SortOperation implements AggregationOperation {
object.put(reference.getRaw(), order.isAscending() ? 1 : -1); object.put(reference.getRaw(), order.isAscending() ? 1 : -1);
} }
return new Document(operator(), object); return new Document(getOperator(), object);
} }
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#getOperator()
*/
@Override @Override
public String operator() { public String getOperator() {
return "$sort"; return "$sort";
} }
} }

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

@ -40,7 +40,7 @@ public class UnsetOperation implements InheritsFieldsAggregationOperation {
/** /**
* Create new instance of {@link UnsetOperation}. * Create new instance of {@link UnsetOperation}.
* *
* @param fields must not be {@literal null}. * @param fields must not be {@literal null}.
*/ */
public UnsetOperation(Collection<Object> fields) { public UnsetOperation(Collection<Object> fields) {
@ -117,15 +117,19 @@ public class UnsetOperation implements InheritsFieldsAggregationOperation {
public Document toDocument(AggregationOperationContext context) { public Document toDocument(AggregationOperationContext context) {
if (fields.size() == 1) { if (fields.size() == 1) {
return new Document(operator(), computeFieldName(fields.iterator().next(), context)); return new Document(getOperator(), computeFieldName(fields.iterator().next(), context));
} }
return new Document(operator(), return new Document(getOperator(),
fields.stream().map(it -> computeFieldName(it, context)).collect(Collectors.toList())); fields.stream().map(it -> computeFieldName(it, context)).collect(Collectors.toList()));
} }
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#getOperator()
*/
@Override @Override
public String operator() { public String getOperator() {
return "$unset"; return "$unset";
} }

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

@ -31,7 +31,8 @@ import org.springframework.util.Assert;
* @author Mark Paluch * @author Mark Paluch
* @author Christoph Strobl * @author Christoph Strobl
* @since 1.3 * @since 1.3
* @see <a href="https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/">MongoDB Aggregation Framework: $unwind</a> * @see <a href="https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/">MongoDB Aggregation Framework:
* $unwind</a>
*/ */
public class UnwindOperation public class UnwindOperation
implements AggregationOperation, FieldsExposingAggregationOperation.InheritsFieldsAggregationOperation { implements AggregationOperation, FieldsExposingAggregationOperation.InheritsFieldsAggregationOperation {
@ -94,7 +95,7 @@ public class UnwindOperation
String path = context.getReference(field).toString(); String path = context.getReference(field).toString();
if (!preserveNullAndEmptyArrays && arrayIndex == null) { if (!preserveNullAndEmptyArrays && arrayIndex == null) {
return new Document(operator(), path); return new Document(getOperator(), path);
} }
Document unwindArgs = new Document(); Document unwindArgs = new Document();
@ -104,11 +105,15 @@ public class UnwindOperation
} }
unwindArgs.put("preserveNullAndEmptyArrays", preserveNullAndEmptyArrays); unwindArgs.put("preserveNullAndEmptyArrays", preserveNullAndEmptyArrays);
return new Document(operator(), unwindArgs); return new Document(getOperator(), unwindArgs);
} }
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.aggregation.AggregationOperation#getOperator()
*/
@Override @Override
public String operator() { public String getOperator() {
return "$unwind"; return "$unwind";
} }

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

@ -99,17 +99,17 @@ public class AggregationTests {
private static boolean initialized = false; private static boolean initialized = false;
@Template // @Template //
static MongoTestTemplate mongoTemplate; private static MongoTestTemplate mongoTemplate;
@BeforeEach @BeforeEach
public void setUp() { void setUp() {
cleanDb(); cleanDb();
initSampleDataIfNecessary(); initSampleDataIfNecessary();
} }
@AfterEach @AfterEach
public void cleanUp() { void cleanUp() {
cleanDb(); cleanDb();
} }
@ -167,25 +167,25 @@ public class AggregationTests {
} }
@Test // DATAMONGO-586 @Test // DATAMONGO-586
public void shouldHandleMissingInputCollection() { void shouldHandleMissingInputCollection() {
assertThatIllegalArgumentException() assertThatIllegalArgumentException()
.isThrownBy(() -> mongoTemplate.aggregate(newAggregation(), (String) null, TagCount.class)); .isThrownBy(() -> mongoTemplate.aggregate(newAggregation(), (String) null, TagCount.class));
} }
@Test // DATAMONGO-586 @Test // DATAMONGO-586
public void shouldHandleMissingAggregationPipeline() { void shouldHandleMissingAggregationPipeline() {
assertThatIllegalArgumentException() assertThatIllegalArgumentException()
.isThrownBy(() -> mongoTemplate.aggregate(null, INPUT_COLLECTION, TagCount.class)); .isThrownBy(() -> mongoTemplate.aggregate(null, INPUT_COLLECTION, TagCount.class));
} }
@Test // DATAMONGO-586 @Test // DATAMONGO-586
public void shouldHandleMissingEntityClass() { void shouldHandleMissingEntityClass() {
assertThatIllegalArgumentException() assertThatIllegalArgumentException()
.isThrownBy(() -> mongoTemplate.aggregate(newAggregation(), INPUT_COLLECTION, null)); .isThrownBy(() -> mongoTemplate.aggregate(newAggregation(), INPUT_COLLECTION, null));
} }
@Test // DATAMONGO-586 @Test // DATAMONGO-586
public void shouldAggregate() { void shouldAggregate() {
createTagDocuments(); createTagDocuments();
@ -214,7 +214,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1637 @Test // DATAMONGO-1637
public void shouldAggregateAndStream() { void shouldAggregateAndStream() {
createTagDocuments(); createTagDocuments();
@ -243,7 +243,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-586 @Test // DATAMONGO-586
public void shouldAggregateEmptyCollection() { void shouldAggregateEmptyCollection() {
Aggregation aggregation = newAggregation(// Aggregation aggregation = newAggregation(//
project("tags"), // project("tags"), //
@ -266,7 +266,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1637 @Test // DATAMONGO-1637
public void shouldAggregateEmptyCollectionAndStream() { void shouldAggregateEmptyCollectionAndStream() {
Aggregation aggregation = newAggregation(// Aggregation aggregation = newAggregation(//
project("tags"), // project("tags"), //
@ -289,7 +289,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1391 @Test // DATAMONGO-1391
public void shouldUnwindWithIndex() { void shouldUnwindWithIndex() {
MongoCollection<Document> coll = mongoTemplate.getCollection(INPUT_COLLECTION); MongoCollection<Document> coll = mongoTemplate.getCollection(INPUT_COLLECTION);
@ -315,7 +315,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1391 @Test // DATAMONGO-1391
public void shouldUnwindPreserveEmpty() { void shouldUnwindPreserveEmpty() {
MongoCollection<Document> coll = mongoTemplate.getCollection(INPUT_COLLECTION); MongoCollection<Document> coll = mongoTemplate.getCollection(INPUT_COLLECTION);
@ -341,7 +341,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-586 @Test // DATAMONGO-586
public void shouldDetectResultMismatch() { void shouldDetectResultMismatch() {
createTagDocuments(); createTagDocuments();
@ -366,7 +366,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1637 @Test // DATAMONGO-1637
public void shouldDetectResultMismatchWhileStreaming() { void shouldDetectResultMismatchWhileStreaming() {
createTagDocuments(); createTagDocuments();
@ -391,7 +391,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-586 @Test // DATAMONGO-586
public void complexAggregationFrameworkUsageLargestAndSmallestCitiesByState() { void complexAggregationFrameworkUsageLargestAndSmallestCitiesByState() {
/* /*
//complex mongodb aggregation framework example from https://docs.mongodb.org/manual/tutorial/aggregation-examples/#largest-and-smallest-cities-by-state //complex mongodb aggregation framework example from https://docs.mongodb.org/manual/tutorial/aggregation-examples/#largest-and-smallest-cities-by-state
db.zipInfo.aggregate( db.zipInfo.aggregate(
@ -499,11 +499,11 @@ public class AggregationTests {
} }
@Test // DATAMONGO-586 @Test // DATAMONGO-586
public void findStatesWithPopulationOver10MillionAggregationExample() { void findStatesWithPopulationOver10MillionAggregationExample() {
/* /*
//complex mongodb aggregation framework example from //complex mongodb aggregation framework example from
https://docs.mongodb.org/manual/tutorial/aggregation-examples/#largest-and-smallest-cities-by-state https://docs.mongodb.org/manual/tutorial/aggregation-examples/#largest-and-smallest-cities-by-state
db.zipcodes.aggregate( db.zipcodes.aggregate(
{ {
$group: { $group: {
@ -549,7 +549,7 @@ public class AggregationTests {
* Framework: $cond</a> * Framework: $cond</a>
*/ */
@Test // DATAMONGO-861 @Test // DATAMONGO-861
public void aggregationUsingConditionalProjectionToCalculateDiscount() { void aggregationUsingConditionalProjectionToCalculateDiscount() {
/* /*
db.inventory.aggregate( db.inventory.aggregate(
@ -602,7 +602,7 @@ public class AggregationTests {
* Framework: $ifNull</a> * Framework: $ifNull</a>
*/ */
@Test // DATAMONGO-861 @Test // DATAMONGO-861
public void aggregationUsingIfNullToProjectSaneDefaults() { void aggregationUsingIfNullToProjectSaneDefaults() {
/* /*
db.inventory.aggregate( db.inventory.aggregate(
@ -642,7 +642,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-861 @Test // DATAMONGO-861
public void aggregationUsingConditionalProjection() { void aggregationUsingConditionalProjection() {
TypedAggregation<ZipInfo> aggregation = newAggregation(ZipInfo.class, // TypedAggregation<ZipInfo> aggregation = newAggregation(ZipInfo.class, //
project() // project() //
@ -664,7 +664,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-861 @Test // DATAMONGO-861
public void aggregationUsingNestedConditionalProjection() { void aggregationUsingNestedConditionalProjection() {
TypedAggregation<ZipInfo> aggregation = newAggregation(ZipInfo.class, // TypedAggregation<ZipInfo> aggregation = newAggregation(ZipInfo.class, //
project() // project() //
@ -687,7 +687,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-861 @Test // DATAMONGO-861
public void aggregationUsingIfNullProjection() { void aggregationUsingIfNullProjection() {
mongoTemplate.insert(new LineItem("id", "caption", 0)); mongoTemplate.insert(new LineItem("id", "caption", 0));
mongoTemplate.insert(new LineItem("idonly", null, 0)); mongoTemplate.insert(new LineItem("idonly", null, 0));
@ -711,7 +711,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-861 @Test // DATAMONGO-861
public void aggregationUsingIfNullReplaceWithFieldReferenceProjection() { void aggregationUsingIfNullReplaceWithFieldReferenceProjection() {
mongoTemplate.insert(new LineItem("id", "caption", 0)); mongoTemplate.insert(new LineItem("id", "caption", 0));
mongoTemplate.insert(new LineItem("idonly", null, 0)); mongoTemplate.insert(new LineItem("idonly", null, 0));
@ -735,7 +735,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-861 @Test // DATAMONGO-861
public void shouldAllowGroupingUsingConditionalExpressions() { void shouldAllowGroupingUsingConditionalExpressions() {
mongoTemplate.dropCollection(CarPerson.class); mongoTemplate.dropCollection(CarPerson.class);
@ -779,7 +779,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1784, DATAMONGO-2264 @Test // DATAMONGO-1784, DATAMONGO-2264
public void shouldAllowSumUsingConditionalExpressions() { void shouldAllowSumUsingConditionalExpressions() {
mongoTemplate.dropCollection(CarPerson.class); mongoTemplate.dropCollection(CarPerson.class);
@ -827,7 +827,7 @@ public class AggregationTests {
* the Five Most Common Likes</a> * the Five Most Common Likes</a>
*/ */
@Test // DATAMONGO-586 @Test // DATAMONGO-586
public void returnFiveMostCommonLikesAggregationFrameworkExample() { void returnFiveMostCommonLikesAggregationFrameworkExample() {
createUserWithLikesDocuments(); createUserWithLikesDocuments();
@ -848,7 +848,7 @@ public class AggregationTests {
assertLikeStats(result.getMappedResults().get(4), "e", 3); assertLikeStats(result.getMappedResults().get(4), "e", 3);
} }
protected TypedAggregation<UserWithLikes> createUsersWithCommonLikesAggregation() { TypedAggregation<UserWithLikes> createUsersWithCommonLikesAggregation() {
return newAggregation(UserWithLikes.class, // return newAggregation(UserWithLikes.class, //
unwind("likes"), // unwind("likes"), //
group("likes").count().as("number"), // group("likes").count().as("number"), //
@ -859,7 +859,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-586 @Test // DATAMONGO-586
public void arithmenticOperatorsInProjectionExample() { void arithmenticOperatorsInProjectionExample() {
Product product = new Product("P1", "A", 1.99, 3, 0.05, 0.19); Product product = new Product("P1", "A", 1.99, 3, 0.05, 0.19);
mongoTemplate.insert(product); mongoTemplate.insert(product);
@ -902,7 +902,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-774 @Test // DATAMONGO-774
public void expressionsInProjectionExample() { void expressionsInProjectionExample() {
Product product = new Product("P1", "A", 1.99, 3, 0.05, 0.19); Product product = new Product("P1", "A", 1.99, 3, 0.05, 0.19);
mongoTemplate.insert(product); mongoTemplate.insert(product);
@ -934,7 +934,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-774 @Test // DATAMONGO-774
public void stringExpressionsInProjectionExample() { void stringExpressionsInProjectionExample() {
Product product = new Product("P1", "A", 1.99, 3, 0.05, 0.19); Product product = new Product("P1", "A", 1.99, 3, 0.05, 0.19);
mongoTemplate.insert(product); mongoTemplate.insert(product);
@ -954,7 +954,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-774 @Test // DATAMONGO-774
public void expressionsInProjectionExampleShowcase() { void expressionsInProjectionExampleShowcase() {
Product product = new Product("P1", "A", 1.99, 3, 0.05, 0.19); Product product = new Product("P1", "A", 1.99, 3, 0.05, 0.19);
mongoTemplate.insert(product); mongoTemplate.insert(product);
@ -983,7 +983,7 @@ public class AggregationTests {
* Data MongoDB - Aggregation Framework - invalid reference in group Operation</a> * Data MongoDB - Aggregation Framework - invalid reference in group Operation</a>
*/ */
@Test // DATAMONGO-753 @Test // DATAMONGO-753
public void allowsNestedFieldReferencesAsGroupIdsInGroupExpressions() { void allowsNestedFieldReferencesAsGroupIdsInGroupExpressions() {
mongoTemplate.insert(new DATAMONGO753().withPDs(new PD("A", 1), new PD("B", 1), new PD("C", 1))); mongoTemplate.insert(new DATAMONGO753().withPDs(new PD("A", 1), new PD("B", 1), new PD("C", 1)));
mongoTemplate.insert(new DATAMONGO753().withPDs(new PD("B", 1), new PD("B", 1), new PD("C", 1))); mongoTemplate.insert(new DATAMONGO753().withPDs(new PD("B", 1), new PD("B", 1), new PD("C", 1)));
@ -1013,7 +1013,7 @@ public class AggregationTests {
* Data MongoDB - Aggregation Framework - invalid reference in group Operation</a> * Data MongoDB - Aggregation Framework - invalid reference in group Operation</a>
*/ */
@Test // DATAMONGO-753 @Test // DATAMONGO-753
public void aliasesNestedFieldInProjectionImmediately() { void aliasesNestedFieldInProjectionImmediately() {
mongoTemplate.insert(new DATAMONGO753().withPDs(new PD("A", 1), new PD("B", 1), new PD("C", 1))); mongoTemplate.insert(new DATAMONGO753().withPDs(new PD("A", 1), new PD("B", 1), new PD("C", 1)));
mongoTemplate.insert(new DATAMONGO753().withPDs(new PD("B", 1), new PD("B", 1), new PD("C", 1))); mongoTemplate.insert(new DATAMONGO753().withPDs(new PD("B", 1), new PD("B", 1), new PD("C", 1)));
@ -1032,7 +1032,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-774 @Test // DATAMONGO-774
public void shouldPerformDateProjectionOperatorsCorrectly() throws ParseException { void shouldPerformDateProjectionOperatorsCorrectly() throws ParseException {
Data data = new Data(); Data data = new Data();
data.stringValue = "ABC"; data.stringValue = "ABC";
@ -1058,7 +1058,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-774 @Test // DATAMONGO-774
public void shouldPerformStringProjectionOperatorsCorrectly() throws ParseException { void shouldPerformStringProjectionOperatorsCorrectly() throws ParseException {
Data data = new Data(); Data data = new Data();
data.dateValue = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss.SSSZ").parse("29.08.1983 12:34:56.789+0000"); data.dateValue = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss.SSSZ").parse("29.08.1983 12:34:56.789+0000");
@ -1094,7 +1094,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1550 @Test // DATAMONGO-1550
public void shouldPerformReplaceRootOperatorCorrectly() throws ParseException { void shouldPerformReplaceRootOperatorCorrectly() throws ParseException {
Data data = new Data(); Data data = new Data();
DataItem dataItem = new DataItem(); DataItem dataItem = new DataItem();
@ -1115,7 +1115,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-788, DATAMONGO-2264 @Test // DATAMONGO-788, DATAMONGO-2264
public void referencesToGroupIdsShouldBeRenderedProperly() { void referencesToGroupIdsShouldBeRenderedProperly() {
mongoTemplate.insert(new DATAMONGO788(1, 1)); mongoTemplate.insert(new DATAMONGO788(1, 1));
mongoTemplate.insert(new DATAMONGO788(1, 1)); mongoTemplate.insert(new DATAMONGO788(1, 1));
@ -1142,7 +1142,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-806 @Test // DATAMONGO-806
public void shouldAllowGroupByIdFields() { void shouldAllowGroupByIdFields() {
mongoTemplate.dropCollection(User.class); mongoTemplate.dropCollection(User.class);
@ -1173,7 +1173,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-840 @Test // DATAMONGO-840
public void shouldAggregateOrderDataToAnInvoice() { void shouldAggregateOrderDataToAnInvoice() {
mongoTemplate.dropCollection(Order.class); mongoTemplate.dropCollection(Order.class);
@ -1210,7 +1210,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-924 @Test // DATAMONGO-924
public void shouldAllowGroupingByAliasedFieldDefinedInFormerAggregationStage() { void shouldAllowGroupingByAliasedFieldDefinedInFormerAggregationStage() {
mongoTemplate.dropCollection(CarPerson.class); mongoTemplate.dropCollection(CarPerson.class);
@ -1241,7 +1241,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-960 @Test // DATAMONGO-960
public void returnFiveMostCommonLikesAggregationFrameworkExampleWithSortOnDiskOptionEnabled() { void returnFiveMostCommonLikesAggregationFrameworkExampleWithSortOnDiskOptionEnabled() {
createUserWithLikesDocuments(); createUserWithLikesDocuments();
@ -1264,7 +1264,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1637 @Test // DATAMONGO-1637
public void returnFiveMostCommonLikesAggregationFrameworkExampleWithSortOnDiskOptionEnabledWhileStreaming() { void returnFiveMostCommonLikesAggregationFrameworkExampleWithSortOnDiskOptionEnabledWhileStreaming() {
createUserWithLikesDocuments(); createUserWithLikesDocuments();
@ -1290,7 +1290,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-960 @Test // DATAMONGO-960
public void returnFiveMostCommonLikesShouldReturnStageExecutionInformationWithExplainOptionEnabled() { void returnFiveMostCommonLikesShouldReturnStageExecutionInformationWithExplainOptionEnabled() {
createUserWithLikesDocuments(); createUserWithLikesDocuments();
@ -1308,7 +1308,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-954, DATAMONGO-2264 @Test // DATAMONGO-954, DATAMONGO-2264
public void shouldSupportReturningCurrentAggregationRoot() { void shouldSupportReturningCurrentAggregationRoot() {
mongoTemplate.save(new Person("p1_first", "p1_last", 25)); mongoTemplate.save(new Person("p1_first", "p1_last", 25));
mongoTemplate.save(new Person("p2_first", "p2_last", 32)); mongoTemplate.save(new Person("p2_first", "p2_last", 32));
@ -1333,7 +1333,7 @@ public class AggregationTests {
* {@link https://stackoverflow.com/questions/24185987/using-root-inside-spring-data-mongodb-for-retrieving-whole-document} * {@link https://stackoverflow.com/questions/24185987/using-root-inside-spring-data-mongodb-for-retrieving-whole-document}
*/ */
@Test // DATAMONGO-954, DATAMONGO-2264 @Test // DATAMONGO-954, DATAMONGO-2264
public void shouldSupportReturningCurrentAggregationRootInReference() { void shouldSupportReturningCurrentAggregationRootInReference() {
mongoTemplate.save(new Reservation("0123", "42", 100)); mongoTemplate.save(new Reservation("0123", "42", 100));
mongoTemplate.save(new Reservation("0360", "43", 200)); mongoTemplate.save(new Reservation("0360", "43", 200));
@ -1352,7 +1352,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1549 @Test // DATAMONGO-1549
public void shouldApplyCountCorrectly() { void shouldApplyCountCorrectly() {
mongoTemplate.save(new Reservation("0123", "42", 100)); mongoTemplate.save(new Reservation("0123", "42", 100));
mongoTemplate.save(new Reservation("0360", "43", 200)); mongoTemplate.save(new Reservation("0360", "43", 200));
@ -1371,7 +1371,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-975 @Test // DATAMONGO-975
public void shouldRetrieveDateTimeFragementsCorrectly() throws Exception { void shouldRetrieveDateTimeFragementsCorrectly() throws Exception {
mongoTemplate.dropCollection(ObjectWithDate.class); mongoTemplate.dropCollection(ObjectWithDate.class);
@ -1424,7 +1424,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1127 @Test // DATAMONGO-1127
public void shouldSupportGeoNearQueriesForAggregationWithDistanceField() { void shouldSupportGeoNearQueriesForAggregationWithDistanceField() {
mongoTemplate.insertAll(Arrays.asList(TestEntities.geolocation().pennStation(), mongoTemplate.insertAll(Arrays.asList(TestEntities.geolocation().pennStation(),
TestEntities.geolocation().tenGenOffice(), TestEntities.geolocation().flatironBuilding())); TestEntities.geolocation().tenGenOffice(), TestEntities.geolocation().flatironBuilding()));
@ -1444,7 +1444,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1348 @Test // DATAMONGO-1348
public void shouldSupportGeoJsonInGeoNearQueriesForAggregationWithDistanceField() { void shouldSupportGeoJsonInGeoNearQueriesForAggregationWithDistanceField() {
mongoTemplate.insert(new Venue("Penn Station", -73.99408, 40.75057)); mongoTemplate.insert(new Venue("Penn Station", -73.99408, 40.75057));
mongoTemplate.insert(new Venue("10gen Office", -73.99171, 40.738868)); mongoTemplate.insert(new Venue("10gen Office", -73.99171, 40.738868));
@ -1466,7 +1466,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1348 @Test // DATAMONGO-1348
public void shouldSupportGeoJsonInGeoNearQueriesForAggregationWithDistanceFieldInMiles() { void shouldSupportGeoJsonInGeoNearQueriesForAggregationWithDistanceFieldInMiles() {
mongoTemplate.insert(new Venue("Penn Station", -73.99408, 40.75057)); mongoTemplate.insert(new Venue("Penn Station", -73.99408, 40.75057));
mongoTemplate.insert(new Venue("10gen Office", -73.99171, 40.738868)); mongoTemplate.insert(new Venue("10gen Office", -73.99171, 40.738868));
@ -1489,7 +1489,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1133 @Test // DATAMONGO-1133
public void shouldHonorFieldAliasesForFieldReferences() { void shouldHonorFieldAliasesForFieldReferences() {
mongoTemplate.insert(new MeterData("m1", "counter1", 42)); mongoTemplate.insert(new MeterData("m1", "counter1", 42));
mongoTemplate.insert(new MeterData("m1", "counter1", 13)); mongoTemplate.insert(new MeterData("m1", "counter1", 13));
@ -1509,7 +1509,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1326 @Test // DATAMONGO-1326
public void shouldLookupPeopleCorectly() { void shouldLookupPeopleCorectly() {
createUsersWithReferencedPersons(); createUsersWithReferencedPersons();
@ -1528,7 +1528,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1326 @Test // DATAMONGO-1326
public void shouldGroupByAndLookupPeopleCorectly() { void shouldGroupByAndLookupPeopleCorectly() {
createUsersWithReferencedPersons(); createUsersWithReferencedPersons();
@ -1549,7 +1549,7 @@ public class AggregationTests {
@Test // DATAMONGO-1418, DATAMONGO-1824 @Test // DATAMONGO-1418, DATAMONGO-1824
@MongoVersion(asOf = "2.6") @MongoVersion(asOf = "2.6")
public void shouldCreateOutputCollection() { void shouldCreateOutputCollection() {
createPersonDocuments(); createPersonDocuments();
@ -1573,7 +1573,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1637 @Test // DATAMONGO-1637
public void shouldCreateOutputCollectionWhileStreaming() { void shouldCreateOutputCollectionWhileStreaming() {
createPersonDocuments(); createPersonDocuments();
@ -1595,7 +1595,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1637 @Test // DATAMONGO-1637
public void shouldReturnDocumentsWithOutputCollectionWhileStreaming() { void shouldReturnDocumentsWithOutputCollectionWhileStreaming() {
createPersonDocuments(); createPersonDocuments();
@ -1626,7 +1626,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1418, DATAMONGO-2536 @Test // DATAMONGO-1418, DATAMONGO-2536
public void outShouldOutBeTheLastOperation() { void outShouldOutBeTheLastOperation() {
assertThatIllegalArgumentException().isThrownBy(() -> newAggregation(match(new Criteria()), // assertThatIllegalArgumentException().isThrownBy(() -> newAggregation(match(new Criteria()), //
group("field1").count().as("totalCount"), // group("field1").count().as("totalCount"), //
out("collection1"), // out("collection1"), //
@ -1634,7 +1634,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1325 @Test // DATAMONGO-1325
public void shouldApplySampleCorrectly() { void shouldApplySampleCorrectly() {
createUserWithLikesDocuments(); createUserWithLikesDocuments();
@ -1651,7 +1651,7 @@ public class AggregationTests {
@Test // DATAMONGO-1457 @Test // DATAMONGO-1457
@MongoVersion(asOf = "3.2") @MongoVersion(asOf = "3.2")
public void sliceShouldBeAppliedCorrectly() { void sliceShouldBeAppliedCorrectly() {
createUserWithLikesDocuments(); createUserWithLikesDocuments();
@ -1667,7 +1667,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1491 @Test // DATAMONGO-1491
public void filterShouldBeAppliedCorrectly() { void filterShouldBeAppliedCorrectly() {
Item item43 = Item.builder().itemId("43").quantity(2).price(2L).build(); Item item43 = Item.builder().itemId("43").quantity(2).price(2L).build();
Item item2 = Item.builder().itemId("2").quantity(1).price(240L).build(); Item item2 = Item.builder().itemId("2").quantity(1).price(240L).build();
@ -1697,7 +1697,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1538 @Test // DATAMONGO-1538
public void letShouldBeAppliedCorrectly() { void letShouldBeAppliedCorrectly() {
Sales2 sales1 = Sales2.builder().id("1").price(10).tax(0.5F).applyDiscount(true).build(); Sales2 sales1 = Sales2.builder().id("1").price(10).tax(0.5F).applyDiscount(true).build();
Sales2 sales2 = Sales2.builder().id("2").price(10).tax(0.25F).applyDiscount(false).build(); Sales2 sales2 = Sales2.builder().id("2").price(10).tax(0.25F).applyDiscount(false).build();
@ -1721,7 +1721,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1551, DATAMONGO-2264 @Test // DATAMONGO-1551, DATAMONGO-2264
public void graphLookupShouldBeAppliedCorrectly() { void graphLookupShouldBeAppliedCorrectly() {
Employee em1 = Employee.builder().id(1).name("Dev").build(); Employee em1 = Employee.builder().id(1).name("Dev").build();
Employee em2 = Employee.builder().id(2).name("Eliot").reportsTo("Dev").build(); Employee em2 = Employee.builder().id(2).name("Eliot").reportsTo("Dev").build();
@ -1753,7 +1753,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1552 @Test // DATAMONGO-1552
public void bucketShouldCollectDocumentsIntoABucket() { void bucketShouldCollectDocumentsIntoABucket() {
Art a1 = Art.builder().id(1).title("The Pillars of Society").artist("Grosz").year(1926).price(199.99).build(); Art a1 = Art.builder().id(1).title("The Pillars of Society").artist("Grosz").year(1926).price(199.99).build();
Art a2 = Art.builder().id(2).title("Melancholy III").artist("Munch").year(1902).price(280.00).build(); Art a2 = Art.builder().id(2).title("Melancholy III").artist("Munch").year(1902).price(280.00).build();
@ -1787,7 +1787,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1552, DATAMONGO-2437 @Test // DATAMONGO-1552, DATAMONGO-2437
public void bucketAutoShouldCollectDocumentsIntoABucket() { void bucketAutoShouldCollectDocumentsIntoABucket() {
Art a1 = Art.builder().id(1).title("The Pillars of Society").artist("Grosz").year(1926).price(199.99).build(); Art a1 = Art.builder().id(1).title("The Pillars of Society").artist("Grosz").year(1926).price(199.99).build();
Art a2 = Art.builder().id(2).title("Melancholy III").artist("Munch").year(1902).price(280.00).build(); Art a2 = Art.builder().id(2).title("Melancholy III").artist("Munch").year(1902).price(280.00).build();
@ -1820,7 +1820,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1552 @Test // DATAMONGO-1552
public void facetShouldCreateFacets() { void facetShouldCreateFacets() {
Art a1 = Art.builder().id(1).title("The Pillars of Society").artist("Grosz").year(1926).price(199.99).build(); Art a1 = Art.builder().id(1).title("The Pillars of Society").artist("Grosz").year(1926).price(199.99).build();
Art a2 = Art.builder().id(2).title("Melancholy III").artist("Munch").year(1902).price(280.00).build(); Art a2 = Art.builder().id(2).title("Melancholy III").artist("Munch").year(1902).price(280.00).build();
@ -1863,7 +1863,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1986 @Test // DATAMONGO-1986
public void runMatchOperationCriteriaThroughQueryMapperForTypedAggregation() { void runMatchOperationCriteriaThroughQueryMapperForTypedAggregation() {
mongoTemplate.insertAll(TestEntities.geolocation().newYork()); mongoTemplate.insertAll(TestEntities.geolocation().newYork());
@ -1878,7 +1878,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-1986 @Test // DATAMONGO-1986
public void runMatchOperationCriteriaThroughQueryMapperForUntypedAggregation() { void runMatchOperationCriteriaThroughQueryMapperForUntypedAggregation() {
mongoTemplate.insertAll(TestEntities.geolocation().newYork()); mongoTemplate.insertAll(TestEntities.geolocation().newYork());
@ -1893,7 +1893,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-2437 @Test // DATAMONGO-2437
public void shouldReadComplexIdValueCorrectly() { void shouldReadComplexIdValueCorrectly() {
WithComplexId source = new WithComplexId(); WithComplexId source = new WithComplexId();
source.id = new ComplexId(); source.id = new ComplexId();
@ -1908,7 +1908,7 @@ public class AggregationTests {
} }
@Test // DATAMONGO-2536 @Test // DATAMONGO-2536
public void skipOutputDoesNotReadBackAggregationResults() { void skipOutputDoesNotReadBackAggregationResults() {
createTagDocuments(); createTagDocuments();
@ -2021,7 +2021,7 @@ public class AggregationTests {
String pDch; String pDch;
@org.springframework.data.mongodb.core.mapping.Field("alias") int up; @org.springframework.data.mongodb.core.mapping.Field("alias") int up;
public PD(String pDch, int up) { PD(String pDch, int up) {
this.pDch = pDch; this.pDch = pDch;
this.up = up; this.up = up;
} }
@ -2036,7 +2036,7 @@ public class AggregationTests {
public DATAMONGO788() {} public DATAMONGO788() {}
public DATAMONGO788(int x, int y) { DATAMONGO788(int x, int y) {
this.x = x; this.x = x;
this.xField = x; this.xField = x;
this.y = y; this.y = y;
@ -2052,7 +2052,7 @@ public class AggregationTests {
public User() {} public User() {}
public User(String id, PushMessage... msgs) { User(String id, PushMessage... msgs) {
this.id = id; this.id = id;
this.msgs = Arrays.asList(msgs); this.msgs = Arrays.asList(msgs);
} }
@ -2067,7 +2067,7 @@ public class AggregationTests {
public PushMessage() {} public PushMessage() {}
public PushMessage(String id, String content, Date createDate) { PushMessage(String id, String content, Date createDate) {
this.id = id; this.id = id;
this.content = content; this.content = content;
this.createDate = createDate; this.createDate = createDate;
@ -2082,7 +2082,7 @@ public class AggregationTests {
private String lastName; private String lastName;
private Descriptors descriptors; private Descriptors descriptors;
public CarPerson(String firstname, String lastname, Entry... entries) { CarPerson(String firstname, String lastname, Entry... entries) {
this.firstName = firstname; this.firstName = firstname;
this.lastName = lastname; this.lastName = lastname;
@ -2102,7 +2102,7 @@ public class AggregationTests {
private List<Entry> entries = new ArrayList<AggregationTests.CarDescriptor.Entry>(); private List<Entry> entries = new ArrayList<AggregationTests.CarDescriptor.Entry>();
public CarDescriptor(Entry... entries) { CarDescriptor(Entry... entries) {
for (Entry entry : entries) { for (Entry entry : entries) {
this.entries.add(entry); this.entries.add(entry);
@ -2118,7 +2118,7 @@ public class AggregationTests {
public Entry() {} public Entry() {}
public Entry(String make, String model, int year) { Entry(String make, String model, int year) {
this.make = make; this.make = make;
this.model = model; this.model = model;
this.year = year; this.year = year;
@ -2134,7 +2134,7 @@ public class AggregationTests {
public Reservation() {} public Reservation() {}
public Reservation(String hotelCode, String confirmationNumber, int timestamp) { Reservation(String hotelCode, String confirmationNumber, int timestamp) {
this.hotelCode = hotelCode; this.hotelCode = hotelCode;
this.confirmationNumber = confirmationNumber; this.confirmationNumber = confirmationNumber;
this.timestamp = timestamp; this.timestamp = timestamp;
@ -2145,7 +2145,7 @@ public class AggregationTests {
Date dateValue; Date dateValue;
public ObjectWithDate(Date dateValue) { ObjectWithDate(Date dateValue) {
this.dateValue = dateValue; this.dateValue = dateValue;
} }
} }
@ -2161,14 +2161,14 @@ public class AggregationTests {
public InventoryItem() {} public InventoryItem() {}
public InventoryItem(int id, String item, int qty) { InventoryItem(int id, String item, int qty) {
this.id = id; this.id = id;
this.item = item; this.item = item;
this.qty = qty; this.qty = qty;
} }
public InventoryItem(int id, String item, String description, int qty) { InventoryItem(int id, String item, String description, int qty) {
this.id = id; this.id = id;
this.item = item; this.item = item;

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

@ -181,5 +181,4 @@ public class ReactiveAggregationTests {
reactiveMongoTemplate.aggregate(agg, Document.class).as(StepVerifier::create).verifyComplete(); reactiveMongoTemplate.aggregate(agg, Document.class).as(StepVerifier::create).verifyComplete();
} }
} }

Loading…
Cancel
Save