diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AddFieldsOperation.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AddFieldsOperation.java index c5f9cbdd3..be1fc43fb 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AddFieldsOperation.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AddFieldsOperation.java @@ -108,6 +108,12 @@ public class AddFieldsOperation extends DocumentEnhancingOperation { return "$addFields"; } + @Override + public boolean equals(Object obj) { + AddFieldsOperation that = obj instanceof AddFieldsOperation ? (AddFieldsOperation) obj : null; + return that != null && this.getValueMap().equals(that.getValueMap()); + } + /** * @author Christoph Strobl * @since 3.0 diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/Aggregation.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/Aggregation.java index 346f8a5b5..3732ae946 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/Aggregation.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/Aggregation.java @@ -19,6 +19,7 @@ import static org.springframework.data.mongodb.core.aggregation.Fields.*; import java.util.Arrays; import java.util.List; +import java.util.Objects; import org.bson.Document; import org.bson.conversions.Bson; @@ -843,4 +844,18 @@ public class Aggregation { public String toString() { return SerializationUtils.serializeToJsonSafely(toDocument("__collection__", DEFAULT_CONTEXT)); } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof Aggregation)) { + return false; + } + Aggregation that = (Aggregation) o; + return Objects.equals(pipeline, that.pipeline) && Objects.equals(options, that.options); + } } + + diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationOperation.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationOperation.java index 969dfc3f8..400284074 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationOperation.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationOperation.java @@ -65,4 +65,6 @@ public interface AggregationOperation { default String getOperator() { return toDocument(Aggregation.DEFAULT_CONTEXT).keySet().iterator().next(); } + + boolean equals(Object obj); } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationOptions.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationOptions.java index 3de7a08a9..6e4693fd0 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationOptions.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationOptions.java @@ -16,6 +16,7 @@ package org.springframework.data.mongodb.core.aggregation; import java.time.Duration; +import java.util.Objects; import java.util.Optional; import org.bson.Document; @@ -740,4 +741,20 @@ public class AggregationOptions implements ReadConcernAware, ReadPreferenceAware */ NONE } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AggregationOptions that = (AggregationOptions) o; + return allowDiskUse == that.allowDiskUse && explain == that.explain && Objects.equals(cursor, that.cursor) + && Objects.equals(collation, that.collation) && Objects.equals(comment, that.comment) + && Objects.equals(hint, that.hint) && Objects.equals(maxTime, that.maxTime) + && resultOptions == that.resultOptions && domainTypeMapping == that.domainTypeMapping + && Objects.equals(readConcern, that.readConcern) && Objects.equals(readPreference, that.readPreference); + } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationPipeline.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationPipeline.java index e7686d0bd..e5422684a 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationPipeline.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationPipeline.java @@ -176,4 +176,16 @@ public class AggregationPipeline { private static boolean isOut(AggregationOperation operator) { return operator instanceof OutOperation || operator.getOperator().equals("$out"); } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof AggregationPipeline)) { + return false; + } + AggregationPipeline that = (AggregationPipeline) o; + return pipeline.equals(that.pipeline); + } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/BasicAggregationOperation.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/BasicAggregationOperation.java index 4d0658203..fb6cf2946 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/BasicAggregationOperation.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/BasicAggregationOperation.java @@ -44,4 +44,16 @@ record BasicAggregationOperation(Object value) implements AggregationOperation { throw new IllegalStateException( String.format("%s cannot be converted to org.bson.Document", ObjectUtils.nullSafeClassName(value))); } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + BasicAggregationOperation that = (BasicAggregationOperation) o; + return ObjectUtils.nullSafeEquals(value, that.value); + } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/BucketAutoOperation.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/BucketAutoOperation.java index 9d96fcb4f..77839c48b 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/BucketAutoOperation.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/BucketAutoOperation.java @@ -21,6 +21,8 @@ import org.springframework.data.mongodb.core.aggregation.BucketAutoOperation.Buc import org.springframework.data.mongodb.core.aggregation.BucketOperationSupport.OutputBuilder; import org.springframework.util.Assert; +import java.util.Objects; + /** * Encapsulates the aggregation framework {@code $bucketAuto}-operation.
* Bucket stage is typically used with {@link Aggregation} and {@code $facet}. Categorizes incoming documents into a @@ -158,6 +160,21 @@ public class BucketAutoOperation extends BucketOperationSupport