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