From f884705f737a26c3c56c95a840da0477eeb0da87 Mon Sep 17 00:00:00 2001 From: Joy Kim Date: Wed, 25 Dec 2024 19:56:11 -0500 Subject: [PATCH 01/13] add queryString --- .../search/QueryStringSearchOperator.java | 32 +++++++++++++++++++ .../SearchConstructibleBsonElement.java | 2 +- .../client/model/search/SearchOperator.java | 17 ++++++++++ .../AggregatesSearchIntegrationTest.java | 4 ++- .../model/search/SearchOperatorTest.java | 25 +++++++++++++++ .../scala/model/search/SearchOperator.scala | 11 +++++++ .../mongodb/scala/model/search/package.scala | 7 ++++ 7 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 driver-core/src/main/com/mongodb/client/model/search/QueryStringSearchOperator.java diff --git a/driver-core/src/main/com/mongodb/client/model/search/QueryStringSearchOperator.java b/driver-core/src/main/com/mongodb/client/model/search/QueryStringSearchOperator.java new file mode 100644 index 00000000000..0027d233dc7 --- /dev/null +++ b/driver-core/src/main/com/mongodb/client/model/search/QueryStringSearchOperator.java @@ -0,0 +1,32 @@ +/* + * Copyright 2008-present MongoDB, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.mongodb.client.model.search; + +import com.mongodb.annotations.Beta; +import com.mongodb.annotations.Reason; +import com.mongodb.annotations.Sealed; + +/** + * @see SearchOperator#text(SearchPath, String) + * @see SearchOperator#text(Iterable, Iterable) + * @since 4.7 + */ +@Sealed +@Beta(Reason.CLIENT) +public interface QueryStringSearchOperator extends SearchOperator { + @Override + TextSearchOperator score(SearchScore modifier); +} diff --git a/driver-core/src/main/com/mongodb/client/model/search/SearchConstructibleBsonElement.java b/driver-core/src/main/com/mongodb/client/model/search/SearchConstructibleBsonElement.java index 8f0b1e510c5..54273b89c8d 100644 --- a/driver-core/src/main/com/mongodb/client/model/search/SearchConstructibleBsonElement.java +++ b/driver-core/src/main/com/mongodb/client/model/search/SearchConstructibleBsonElement.java @@ -31,7 +31,7 @@ final class SearchConstructibleBsonElement extends AbstractConstructibleBsonElement implements MustCompoundSearchOperator, MustNotCompoundSearchOperator, ShouldCompoundSearchOperator, FilterCompoundSearchOperator, ExistsSearchOperator, TextSearchOperator, AutocompleteSearchOperator, - NumberNearSearchOperator, DateNearSearchOperator, GeoNearSearchOperator, + NumberNearSearchOperator, DateNearSearchOperator, GeoNearSearchOperator, QueryStringSearchOperator, ValueBoostSearchScore, PathBoostSearchScore, ConstantSearchScore, FunctionSearchScore, GaussSearchScoreExpression, PathSearchScoreExpression, FacetSearchCollector, diff --git a/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java b/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java index 9234db91c51..90569f9e42a 100644 --- a/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java +++ b/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java @@ -292,6 +292,23 @@ static GeoNearSearchOperator near(final Point origin, final Number pivot, final .append("pivot", notNull("pivot", pivot))); } + /** + * Returns a {@link SearchOperator} that supports querying a combination of indexed fields and values. + * + * @param defaultPath The field to be searched by default. + * @param query One or more indexed fields and values to search. + * @return The requested {@link SearchOperator}. + * @mongodb.atlas.manual atlas-search/queryString/ queryString operator + */ + static QueryStringSearchOperator queryString(final SearchPath defaultPath, final String query) { + isTrueArgument("path must not be empty", defaultPath != null); + isTrueArgument("query must not be empty", query != null); + + return new SearchConstructibleBsonElement("queryString", + new Document("defaultPath", defaultPath.toBsonValue()) + .append("query", query)); + } + /** * Creates a {@link SearchOperator} from a {@link Bson} in situations when there is no builder method that better satisfies your needs. * This method cannot be used to validate the syntax. diff --git a/driver-core/src/test/functional/com/mongodb/client/model/search/AggregatesSearchIntegrationTest.java b/driver-core/src/test/functional/com/mongodb/client/model/search/AggregatesSearchIntegrationTest.java index 29de80dda32..e575af9574d 100644 --- a/driver-core/src/test/functional/com/mongodb/client/model/search/AggregatesSearchIntegrationTest.java +++ b/driver-core/src/test/functional/com/mongodb/client/model/search/AggregatesSearchIntegrationTest.java @@ -82,6 +82,7 @@ import static com.mongodb.client.model.search.SearchOperator.exists; import static com.mongodb.client.model.search.SearchOperator.near; import static com.mongodb.client.model.search.SearchOperator.numberRange; +import static com.mongodb.client.model.search.SearchOperator.queryString; import static com.mongodb.client.model.search.SearchOperator.text; import static com.mongodb.client.model.search.SearchOptions.searchOptions; import static com.mongodb.client.model.search.SearchPath.fieldPath; @@ -608,7 +609,8 @@ private static Stream searchAndSearchMetaArgs() { dateRange(fieldPath("fieldName6")) .lte(Instant.ofEpochMilli(1)), near(0, 1.5, fieldPath("fieldName7"), fieldPath("fieldName8")), - near(Instant.ofEpochMilli(1), Duration.ofMillis(3), fieldPath("fieldName9")) + near(Instant.ofEpochMilli(1), Duration.ofMillis(3), fieldPath("fieldName9")), + queryString(fieldPath("fieldName12"), "term8") )) .minimumShouldMatch(1) .mustNot(singleton( diff --git a/driver-core/src/test/unit/com/mongodb/client/model/search/SearchOperatorTest.java b/driver-core/src/test/unit/com/mongodb/client/model/search/SearchOperatorTest.java index c0ea645fb73..9732045784d 100644 --- a/driver-core/src/test/unit/com/mongodb/client/model/search/SearchOperatorTest.java +++ b/driver-core/src/test/unit/com/mongodb/client/model/search/SearchOperatorTest.java @@ -581,6 +581,31 @@ void near() { ); } + + @Test + void queryString() { + assertAll( + () -> assertThrows(IllegalArgumentException.class, () -> + // queries must not be empty + SearchOperator.queryString(fieldPath("fieldName"), null) + ), + () -> assertThrows(IllegalArgumentException.class, () -> + // paths must not be empty + SearchOperator.queryString(null, "term1 AND (term2 OR term3)") + ), + () -> assertEquals( + new BsonDocument("queryString", + new BsonDocument("defaultPath", fieldPath("fieldName").toBsonValue()) + .append("query", new BsonString("term1 AND (term2 OR term3)")) + ), + SearchOperator.queryString( + fieldPath("fieldName"), + "term1 AND (term2 OR term3)") + .toBsonDocument() + ) + ); + } + private static SearchOperator docExamplePredefined() { return SearchOperator.exists( fieldPath("fieldName")); diff --git a/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala b/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala index 90f27092ebc..b98c0974662 100644 --- a/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala +++ b/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala @@ -228,6 +228,17 @@ object SearchOperator { def near(origin: Point, pivot: Number, paths: Iterable[_ <: FieldSearchPath]): GeoNearSearchOperator = JSearchOperator.near(origin, pivot, paths.asJava) + /** + * Returns a `SearchOperator` that supports querying a combination of indexed fields and values. + * + * @param defaultPath The field to be searched by default. + * @param query One or more indexed fields and values to search. + * @return The requested `SearchOperator`. + * @see [[https://www.mongodb.com/docs/atlas/atlas-search/queryString/ queryString operator]] + */ + def queryString(defaultPath: SearchPath, query: String): QueryStringSearchOperator = + JSearchOperator.queryString(defaultPath, query) + /** * Creates a `SearchOperator` from a `Bson` in situations when there is no builder method that better satisfies your needs. * This method cannot be used to validate the syntax. diff --git a/driver-scala/src/main/scala/org/mongodb/scala/model/search/package.scala b/driver-scala/src/main/scala/org/mongodb/scala/model/search/package.scala index 557060324cd..367e1200f35 100644 --- a/driver-scala/src/main/scala/org/mongodb/scala/model/search/package.scala +++ b/driver-scala/src/main/scala/org/mongodb/scala/model/search/package.scala @@ -182,6 +182,13 @@ package object search { @Beta(Array(Reason.CLIENT)) type GeoNearSearchOperator = com.mongodb.client.model.search.GeoNearSearchOperator + /** + * @see `SearchOperator.queryString` + */ + @Sealed + @Beta(Array(Reason.CLIENT)) + type QueryStringSearchOperator = com.mongodb.client.model.search.QueryStringSearchOperator + /** * Fuzzy search options that may be used with some [[SearchOperator]]s. * From 1e313947c7634e40d54fff7a5171287d0ccdde63 Mon Sep 17 00:00:00 2001 From: Joy Kim Date: Wed, 25 Dec 2024 22:59:43 -0500 Subject: [PATCH 02/13] updated version --- .../client/model/search/QueryStringSearchOperator.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/driver-core/src/main/com/mongodb/client/model/search/QueryStringSearchOperator.java b/driver-core/src/main/com/mongodb/client/model/search/QueryStringSearchOperator.java index 0027d233dc7..53acd73cc03 100644 --- a/driver-core/src/main/com/mongodb/client/model/search/QueryStringSearchOperator.java +++ b/driver-core/src/main/com/mongodb/client/model/search/QueryStringSearchOperator.java @@ -20,13 +20,12 @@ import com.mongodb.annotations.Sealed; /** - * @see SearchOperator#text(SearchPath, String) - * @see SearchOperator#text(Iterable, Iterable) - * @since 4.7 + * @see SearchOperator#queryString(SearchPath, String) + * @since 5.3 */ @Sealed @Beta(Reason.CLIENT) public interface QueryStringSearchOperator extends SearchOperator { @Override - TextSearchOperator score(SearchScore modifier); + QueryStringSearchOperator score(SearchScore modifier); } From c66950730e50a06f896eab43cc376b5d7936dd8a Mon Sep 17 00:00:00 2001 From: Joy Kim Date: Tue, 7 Jan 2025 10:32:12 -0500 Subject: [PATCH 03/13] wip --- .../model/search/EqualsSearchOperator.java | 31 +++++ .../SearchConstructibleBsonElement.java | 2 +- .../client/model/search/SearchOperator.java | 108 ++++++++++++++++++ .../model/search/SearchOperatorTest.java | 97 ++++++++++++++++ .../scala/model/search/SearchOperator.scala | 70 ++++++++++++ .../mongodb/scala/model/search/package.scala | 7 ++ 6 files changed, 314 insertions(+), 1 deletion(-) create mode 100644 driver-core/src/main/com/mongodb/client/model/search/EqualsSearchOperator.java diff --git a/driver-core/src/main/com/mongodb/client/model/search/EqualsSearchOperator.java b/driver-core/src/main/com/mongodb/client/model/search/EqualsSearchOperator.java new file mode 100644 index 00000000000..057e4bc8cf9 --- /dev/null +++ b/driver-core/src/main/com/mongodb/client/model/search/EqualsSearchOperator.java @@ -0,0 +1,31 @@ +/* + * Copyright 2008-present MongoDB, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.mongodb.client.model.search; + +import com.mongodb.annotations.Beta; +import com.mongodb.annotations.Reason; +import com.mongodb.annotations.Sealed; + +/** + * @see SearchOperator#equals(FieldSearchPath, String) + * @since 5.3 + */ +@Sealed +@Beta(Reason.CLIENT) +public interface EqualsSearchOperator extends SearchOperator { + @Override + TextSearchOperator score(SearchScore modifier); +} diff --git a/driver-core/src/main/com/mongodb/client/model/search/SearchConstructibleBsonElement.java b/driver-core/src/main/com/mongodb/client/model/search/SearchConstructibleBsonElement.java index 8f0b1e510c5..220e42aaf11 100644 --- a/driver-core/src/main/com/mongodb/client/model/search/SearchConstructibleBsonElement.java +++ b/driver-core/src/main/com/mongodb/client/model/search/SearchConstructibleBsonElement.java @@ -31,7 +31,7 @@ final class SearchConstructibleBsonElement extends AbstractConstructibleBsonElement implements MustCompoundSearchOperator, MustNotCompoundSearchOperator, ShouldCompoundSearchOperator, FilterCompoundSearchOperator, ExistsSearchOperator, TextSearchOperator, AutocompleteSearchOperator, - NumberNearSearchOperator, DateNearSearchOperator, GeoNearSearchOperator, + NumberNearSearchOperator, DateNearSearchOperator, GeoNearSearchOperator, EqualsSearchOperator, ValueBoostSearchScore, PathBoostSearchScore, ConstantSearchScore, FunctionSearchScore, GaussSearchScoreExpression, PathSearchScoreExpression, FacetSearchCollector, diff --git a/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java b/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java index 9234db91c51..b5d4e47dc90 100644 --- a/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java +++ b/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java @@ -20,6 +20,14 @@ import com.mongodb.annotations.Sealed; import com.mongodb.client.model.Aggregates; import com.mongodb.client.model.geojson.Point; + +import com.mongodb.lang.Nullable; + +import java.util.Date; +import java.util.UUID; + +import org.bson.BsonBinary; +import org.bson.BsonNull; import org.bson.BsonType; import org.bson.Document; import org.bson.conversions.Bson; @@ -28,6 +36,8 @@ import java.time.Instant; import java.util.Iterator; +import org.bson.types.ObjectId; + import static com.mongodb.assertions.Assertions.isTrueArgument; import static com.mongodb.internal.Iterables.concat; import static com.mongodb.internal.client.model.Util.combineToBsonValue; @@ -292,6 +302,104 @@ static GeoNearSearchOperator near(final Point origin, final Number pivot, final .append("pivot", notNull("pivot", pivot))); } + /** + * Returns a {@link SearchOperator} that performs a search for documents containing an ordered sequence of terms. + * + * @param path The indexed field to be searched. + * @param value The boolean value to query for. + * @return The requested {@link SearchOperator}. + * @mongodb.atlas.manual atlas-search/equals/ equals operator + */ + static EqualsSearchOperator equals(final FieldSearchPath path, final boolean value) { + return new SearchConstructibleBsonElement("equals", new Document("path", notNull("path", path).toValue()) + .append("value", value)); + } + + /** + * Returns a {@link SearchOperator} that performs a search for documents containing an ordered sequence of terms. + * + * @param path The indexed field to be searched. + * @param value The object id value to query for. + * @return The requested {@link SearchOperator}. + * @mongodb.atlas.manual atlas-search/equals/ equals operator + */ + static EqualsSearchOperator equals(final FieldSearchPath path, @Nullable final ObjectId value) { + if (value == null) { + return new SearchConstructibleBsonElement("equals", new Document("path", notNull("path", path).toValue()) + .append("value", BsonNull.VALUE)); + } + return new SearchConstructibleBsonElement("equals", new Document("path", notNull("path", path).toValue()) + .append("value", value)); + } + + /** + * Returns a {@link SearchOperator} that performs a search for documents containing an ordered sequence of terms. + * + * @param path The indexed field to be searched. + * @param value The number value to query for. + * @return The requested {@link SearchOperator}. + * @mongodb.atlas.manual atlas-search/equals/ equals operator + */ + static EqualsSearchOperator equals(final FieldSearchPath path, @Nullable final Number value) { + if (value == null) { + return new SearchConstructibleBsonElement("equals", new Document("path", notNull("path", path).toValue()) + .append("value", BsonNull.VALUE)); + } + return new SearchConstructibleBsonElement("equals", new Document("path", notNull("path", path).toValue()) + .append("value", value)); + } + + /** + * Returns a {@link SearchOperator} that performs a search for documents containing an ordered sequence of terms. + * + * @param path The indexed field to be searched. + * @param value The date value to query for. + * @return The requested {@link SearchOperator}. + * @mongodb.atlas.manual atlas-search/equals/ equals operator + */ + static EqualsSearchOperator equals(final FieldSearchPath path, @Nullable final Date value) { + if (value == null) { + return new SearchConstructibleBsonElement("equals", new Document("path", notNull("path", path).toValue()) + .append("value", BsonNull.VALUE)); + } + return new SearchConstructibleBsonElement("equals", new Document("path", notNull("path", path).toValue()) + .append("value", value)); + } + + /** + * Returns a {@link SearchOperator} that performs a search for documents containing an ordered sequence of terms. + * + * @param path The indexed field to be searched. + * @param value The string value to query for. + * @return The requested {@link SearchOperator}. + * @mongodb.atlas.manual atlas-search/equals/ equals operator + */ + static EqualsSearchOperator equals(final FieldSearchPath path, @Nullable final String value) { + if (value == null) { + return new SearchConstructibleBsonElement("equals", new Document("path", notNull("path", path).toValue()) + .append("value", BsonNull.VALUE)); + } + return new SearchConstructibleBsonElement("equals", new Document("path", notNull("path", path).toValue()) + .append("value", value)); + } + + /** + * Returns a {@link SearchOperator} that performs a search for documents containing an ordered sequence of terms. + * + * @param path The indexed field to be searched. + * @param value The uuid value to query for. + * @return The requested {@link SearchOperator}. + * @mongodb.atlas.manual atlas-search/equals/ equals operator + */ + static EqualsSearchOperator equals(final FieldSearchPath path, @Nullable final UUID value) { + if (value == null) { + return new SearchConstructibleBsonElement("equals", new Document("path", notNull("path", path).toValue()) + .append("value", BsonNull.VALUE)); + } + return new SearchConstructibleBsonElement("equals", new Document("path", notNull("path", path).toValue()) + .append("value", new BsonBinary(value))); + } + /** * Creates a {@link SearchOperator} from a {@link Bson} in situations when there is no builder method that better satisfies your needs. * This method cannot be used to validate the syntax. diff --git a/driver-core/src/test/unit/com/mongodb/client/model/search/SearchOperatorTest.java b/driver-core/src/test/unit/com/mongodb/client/model/search/SearchOperatorTest.java index c0ea645fb73..b95a0b05bfd 100644 --- a/driver-core/src/test/unit/com/mongodb/client/model/search/SearchOperatorTest.java +++ b/driver-core/src/test/unit/com/mongodb/client/model/search/SearchOperatorTest.java @@ -18,14 +18,25 @@ import com.mongodb.MongoClientSettings; import com.mongodb.client.model.geojson.Point; import com.mongodb.client.model.geojson.Position; + +import java.util.Date; +import java.util.Optional; + +import java.util.UUID; + import org.bson.BsonArray; +import org.bson.BsonBinary; +import org.bson.BsonBoolean; import org.bson.BsonDateTime; import org.bson.BsonDocument; import org.bson.BsonDouble; import org.bson.BsonInt32; import org.bson.BsonInt64; +import org.bson.BsonNull; +import org.bson.BsonObjectId; import org.bson.BsonString; import org.bson.Document; +import org.bson.types.ObjectId; import org.junit.jupiter.api.Test; import java.time.Duration; @@ -581,6 +592,92 @@ void near() { ); } + @Test + void equals() { + ObjectId id = new ObjectId(); + BsonDateTime date = new BsonDateTime(System.currentTimeMillis()); + UUID uuid = UUID.randomUUID(); + Optional optionalValue = Optional.ofNullable(null); + assertAll( + () -> assertThrows(IllegalArgumentException.class, () -> + // paths must not be empty + SearchOperator.equals(null, "term") + ), + () -> assertEquals( + new BsonDocument("equals", + new BsonDocument("path", fieldPath("fieldName").toBsonValue()) + .append("value", new BsonBoolean(true)) + ), + SearchOperator.equals( + fieldPath("fieldName"), true).toBsonDocument() + ), + () -> assertEquals( + new BsonDocument("equals", + new BsonDocument("path", fieldPath("fieldName").toBsonValue()) + .append("value", new BsonObjectId(id)) + ), + SearchOperator.equals( + fieldPath("fieldName"), id).toBsonDocument() + ), + () -> assertEquals( + new BsonDocument("equals", + new BsonDocument("path", fieldPath("fieldName").toBsonValue()) + .append("value", new BsonInt32(1)) + ), + SearchOperator.equals( + fieldPath("fieldName"), 1).toBsonDocument() + ), + () -> assertEquals( + new BsonDocument("equals", + new BsonDocument("path", fieldPath("fieldName").toBsonValue()) + .append("value", new BsonInt64(Long.MAX_VALUE)) + ), + SearchOperator.equals( + fieldPath("fieldName"), Long.MAX_VALUE).toBsonDocument() + ), + () -> assertEquals( + new BsonDocument("equals", + new BsonDocument("path", fieldPath("fieldName").toBsonValue()) + .append("value", new BsonDouble(1.0)) + ), + SearchOperator.equals( + fieldPath("fieldName"), 1.0).toBsonDocument() + ), + () -> assertEquals( + new BsonDocument("equals", + new BsonDocument("path", fieldPath("fieldName").toBsonValue()) + .append("value", date) + ), + SearchOperator.equals( + fieldPath("fieldName"), new Date(date.getValue())).toBsonDocument() + ), + () -> assertEquals( + new BsonDocument("equals", + new BsonDocument("path", fieldPath("fieldName").toBsonValue()) + .append("value", new BsonString("term")) + ), + SearchOperator.equals( + fieldPath("fieldName"), "term").toBsonDocument() + ), + () -> assertEquals( + new BsonDocument("equals", + new BsonDocument("path", fieldPath("fieldName").toBsonValue()) + .append("value", new BsonBinary(uuid)) + ), + SearchOperator.equals( + fieldPath("fieldName"), uuid).toBsonDocument() + ), + () -> assertEquals( + new BsonDocument("equals", + new BsonDocument("path", fieldPath("fieldName").toBsonValue()) + .append("value", BsonNull.VALUE) + ), + SearchOperator.equals( + fieldPath("fieldName"), optionalValue.orElse(null)).toBsonDocument() + ) + ); + } + private static SearchOperator docExamplePredefined() { return SearchOperator.exists( fieldPath("fieldName")); diff --git a/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala b/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala index 90f27092ebc..09db9081643 100644 --- a/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala +++ b/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala @@ -20,7 +20,11 @@ import com.mongodb.client.model.search.{ SearchOperator => JSearchOperator } import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.model.geojson.Point +import org.bson.types.ObjectId; + import java.time.{ Duration, Instant } +import java.util.Date +import java.util.UUID import collection.JavaConverters._ /** @@ -228,6 +232,72 @@ object SearchOperator { def near(origin: Point, pivot: Number, paths: Iterable[_ <: FieldSearchPath]): GeoNearSearchOperator = JSearchOperator.near(origin, pivot, paths.asJava) + /** + * Returns a `SearchOperator` that performs a search for documents containing an ordered sequence of terms. + * + * @param path The indexed field to be searched. + * @param value The boolean value to query for. + * @return The requested `SearchOperator`. + * @see [[https://www.mongodb.com/docs/atlas/atlas-search/equals/ equals operator]] + */ + def equals(path: FieldSearchPath, value: Boolean): EqualsSearchOperator = + JSearchOperator.equals(path, value) + + /** + * Returns a `SearchOperator` that performs a search for documents containing an ordered sequence of terms. + * + * @param path The indexed field to be searched. + * @param value The object id value to query for. + * @return The requested `SearchOperator`. + * @see [[https://www.mongodb.com/docs/atlas/atlas-search/equals/ equals operator]] + */ + def equals(path: FieldSearchPath, value: ObjectId): EqualsSearchOperator = + JSearchOperator.equals(path, value) + + /** + * Returns a `SearchOperator` that performs a search for documents containing an ordered sequence of terms. + * + * @param path The indexed field to be searched. + * @param value The number value to query for. + * @return The requested `SearchOperator`. + * @see [[https://www.mongodb.com/docs/atlas/atlas-search/equals/ equals operator]] + */ + def equals(path: FieldSearchPath, value: Number): EqualsSearchOperator = + JSearchOperator.equals(path, value) + + /** + * Returns a `SearchOperator` that performs a search for documents containing an ordered sequence of terms. + * + * @param path The indexed field to be searched. + * @param value The date value to query for. + * @return The requested `SearchOperator`. + * @see [[https://www.mongodb.com/docs/atlas/atlas-search/equals/ equals operator]] + */ + def equals(path: FieldSearchPath, value: Date): EqualsSearchOperator = + JSearchOperator.equals(path, value) + + /** + * Returns a `SearchOperator` that performs a search for documents containing an ordered sequence of terms. + * + * @param path The indexed field to be searched. + * @param value The string value to query for. + * @return The requested `SearchOperator`. + * @see [[https://www.mongodb.com/docs/atlas/atlas-search/equals/ equals operator]] + */ + def equals(path: FieldSearchPath, value: String): EqualsSearchOperator = + JSearchOperator.equals(path, value) + + /** + * Returns a `SearchOperator` that performs a search for documents containing an ordered sequence of terms. + * + * @param path The indexed field to be searched. + * @param value The uuid value to query for. + * @return The requested `SearchOperator`. + * @see [[https://www.mongodb.com/docs/atlas/atlas-search/equals/ equals operator]] + */ + def equals(path: FieldSearchPath, value: UUID): EqualsSearchOperator = + JSearchOperator.equals(path, value) + /** * Creates a `SearchOperator` from a `Bson` in situations when there is no builder method that better satisfies your needs. * This method cannot be used to validate the syntax. diff --git a/driver-scala/src/main/scala/org/mongodb/scala/model/search/package.scala b/driver-scala/src/main/scala/org/mongodb/scala/model/search/package.scala index 557060324cd..57da677c17a 100644 --- a/driver-scala/src/main/scala/org/mongodb/scala/model/search/package.scala +++ b/driver-scala/src/main/scala/org/mongodb/scala/model/search/package.scala @@ -182,6 +182,13 @@ package object search { @Beta(Array(Reason.CLIENT)) type GeoNearSearchOperator = com.mongodb.client.model.search.GeoNearSearchOperator + /** + * @see `SearchOperator.equals` + */ + @Sealed + @Beta(Array(Reason.CLIENT)) + type EqualsSearchOperator = com.mongodb.client.model.search.EqualsSearchOperator + /** * Fuzzy search options that may be used with some [[SearchOperator]]s. * From 9709f0e250b6d6c489f16b429e65ec8b20edd966 Mon Sep 17 00:00:00 2001 From: Joy Kim Date: Wed, 8 Jan 2025 16:50:46 -0500 Subject: [PATCH 04/13] change date to instant --- .../main/com/mongodb/client/model/search/SearchOperator.java | 4 ++-- .../com/mongodb/client/model/search/SearchOperatorTest.java | 5 ++--- .../org/mongodb/scala/model/search/SearchOperator.scala | 5 ++--- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java b/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java index b5d4e47dc90..dc47af7a4b2 100644 --- a/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java +++ b/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java @@ -353,11 +353,11 @@ static EqualsSearchOperator equals(final FieldSearchPath path, @Nullable final N * Returns a {@link SearchOperator} that performs a search for documents containing an ordered sequence of terms. * * @param path The indexed field to be searched. - * @param value The date value to query for. + * @param value The instant date value to query for. * @return The requested {@link SearchOperator}. * @mongodb.atlas.manual atlas-search/equals/ equals operator */ - static EqualsSearchOperator equals(final FieldSearchPath path, @Nullable final Date value) { + static EqualsSearchOperator equals(final FieldSearchPath path, @Nullable final Instant value) { if (value == null) { return new SearchConstructibleBsonElement("equals", new Document("path", notNull("path", path).toValue()) .append("value", BsonNull.VALUE)); diff --git a/driver-core/src/test/unit/com/mongodb/client/model/search/SearchOperatorTest.java b/driver-core/src/test/unit/com/mongodb/client/model/search/SearchOperatorTest.java index b95a0b05bfd..4e208c2f5d9 100644 --- a/driver-core/src/test/unit/com/mongodb/client/model/search/SearchOperatorTest.java +++ b/driver-core/src/test/unit/com/mongodb/client/model/search/SearchOperatorTest.java @@ -595,7 +595,6 @@ void near() { @Test void equals() { ObjectId id = new ObjectId(); - BsonDateTime date = new BsonDateTime(System.currentTimeMillis()); UUID uuid = UUID.randomUUID(); Optional optionalValue = Optional.ofNullable(null); assertAll( @@ -646,10 +645,10 @@ void equals() { () -> assertEquals( new BsonDocument("equals", new BsonDocument("path", fieldPath("fieldName").toBsonValue()) - .append("value", date) + .append("value", new BsonDateTime(Instant.EPOCH.toEpochMilli())) ), SearchOperator.equals( - fieldPath("fieldName"), new Date(date.getValue())).toBsonDocument() + fieldPath("fieldName"), Instant.EPOCH).toBsonDocument() ), () -> assertEquals( new BsonDocument("equals", diff --git a/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala b/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala index 09db9081643..74603c5394e 100644 --- a/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala +++ b/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala @@ -23,7 +23,6 @@ import org.mongodb.scala.model.geojson.Point import org.bson.types.ObjectId; import java.time.{ Duration, Instant } -import java.util.Date import java.util.UUID import collection.JavaConverters._ @@ -269,11 +268,11 @@ object SearchOperator { * Returns a `SearchOperator` that performs a search for documents containing an ordered sequence of terms. * * @param path The indexed field to be searched. - * @param value The date value to query for. + * @param value The instant date value to query for. * @return The requested `SearchOperator`. * @see [[https://www.mongodb.com/docs/atlas/atlas-search/equals/ equals operator]] */ - def equals(path: FieldSearchPath, value: Date): EqualsSearchOperator = + def equals(path: FieldSearchPath, value: Instant): EqualsSearchOperator = JSearchOperator.equals(path, value) /** From 85c3580708055d3b3f62a7300624478050eeee4b Mon Sep 17 00:00:00 2001 From: Joy Kim Date: Fri, 10 Jan 2025 12:57:02 -0500 Subject: [PATCH 05/13] searchPath to FieldSearchPath --- .../mongodb/client/model/search/QueryStringSearchOperator.java | 2 +- .../main/com/mongodb/client/model/search/SearchOperator.java | 2 +- .../scala/org/mongodb/scala/model/search/SearchOperator.scala | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/driver-core/src/main/com/mongodb/client/model/search/QueryStringSearchOperator.java b/driver-core/src/main/com/mongodb/client/model/search/QueryStringSearchOperator.java index 53acd73cc03..eb32ee8c733 100644 --- a/driver-core/src/main/com/mongodb/client/model/search/QueryStringSearchOperator.java +++ b/driver-core/src/main/com/mongodb/client/model/search/QueryStringSearchOperator.java @@ -20,7 +20,7 @@ import com.mongodb.annotations.Sealed; /** - * @see SearchOperator#queryString(SearchPath, String) + * @see SearchOperator#queryString(FieldSearchPath, String) * @since 5.3 */ @Sealed diff --git a/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java b/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java index 90569f9e42a..9a71d9f1f42 100644 --- a/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java +++ b/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java @@ -300,7 +300,7 @@ static GeoNearSearchOperator near(final Point origin, final Number pivot, final * @return The requested {@link SearchOperator}. * @mongodb.atlas.manual atlas-search/queryString/ queryString operator */ - static QueryStringSearchOperator queryString(final SearchPath defaultPath, final String query) { + static QueryStringSearchOperator queryString(final FieldSearchPath defaultPath, final String query) { isTrueArgument("path must not be empty", defaultPath != null); isTrueArgument("query must not be empty", query != null); diff --git a/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala b/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala index b98c0974662..6e1cc91a9bb 100644 --- a/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala +++ b/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala @@ -236,7 +236,7 @@ object SearchOperator { * @return The requested `SearchOperator`. * @see [[https://www.mongodb.com/docs/atlas/atlas-search/queryString/ queryString operator]] */ - def queryString(defaultPath: SearchPath, query: String): QueryStringSearchOperator = + def queryString(defaultPath: FieldSearchPath, query: String): QueryStringSearchOperator = JSearchOperator.queryString(defaultPath, query) /** From 34bc6d8773749f9949d1ee51fc8dc24435f7bb07 Mon Sep 17 00:00:00 2001 From: Joy Kim Date: Mon, 13 Jan 2025 17:12:18 -0500 Subject: [PATCH 06/13] wip --- .../model/search/EqualsSearchOperator.java | 12 +++++ .../client/model/search/SearchOperator.java | 53 ++++++++----------- .../AggregatesSearchIntegrationTest.java | 5 +- .../model/search/SearchOperatorTest.java | 13 ++--- .../scala/model/search/SearchOperator.scala | 11 ++++ 5 files changed, 52 insertions(+), 42 deletions(-) diff --git a/driver-core/src/main/com/mongodb/client/model/search/EqualsSearchOperator.java b/driver-core/src/main/com/mongodb/client/model/search/EqualsSearchOperator.java index 057e4bc8cf9..69935d8f02e 100644 --- a/driver-core/src/main/com/mongodb/client/model/search/EqualsSearchOperator.java +++ b/driver-core/src/main/com/mongodb/client/model/search/EqualsSearchOperator.java @@ -19,8 +19,20 @@ import com.mongodb.annotations.Reason; import com.mongodb.annotations.Sealed; +import java.util.UUID; + +import java.time.Instant; + +import org.bson.types.ObjectId; + /** + * @see SearchOperator#equals(FieldSearchPath, boolean) + * @see SearchOperator#equals(FieldSearchPath, ObjectId) + * @see SearchOperator#equals(FieldSearchPath, Number) + * @see SearchOperator#equals(FieldSearchPath, Instant) * @see SearchOperator#equals(FieldSearchPath, String) + * @see SearchOperator#equals(FieldSearchPath, UUID) + * @see SearchOperator#equalsNull(FieldSearchPath) * @since 5.3 */ @Sealed diff --git a/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java b/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java index dc47af7a4b2..f1584021e23 100644 --- a/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java +++ b/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java @@ -21,9 +21,6 @@ import com.mongodb.client.model.Aggregates; import com.mongodb.client.model.geojson.Point; -import com.mongodb.lang.Nullable; - -import java.util.Date; import java.util.UUID; import org.bson.BsonBinary; @@ -323,13 +320,9 @@ static EqualsSearchOperator equals(final FieldSearchPath path, final boolean val * @return The requested {@link SearchOperator}. * @mongodb.atlas.manual atlas-search/equals/ equals operator */ - static EqualsSearchOperator equals(final FieldSearchPath path, @Nullable final ObjectId value) { - if (value == null) { - return new SearchConstructibleBsonElement("equals", new Document("path", notNull("path", path).toValue()) - .append("value", BsonNull.VALUE)); - } + static EqualsSearchOperator equals(final FieldSearchPath path, final ObjectId value) { return new SearchConstructibleBsonElement("equals", new Document("path", notNull("path", path).toValue()) - .append("value", value)); + .append("value", notNull("value", value))); } /** @@ -340,13 +333,9 @@ static EqualsSearchOperator equals(final FieldSearchPath path, @Nullable final O * @return The requested {@link SearchOperator}. * @mongodb.atlas.manual atlas-search/equals/ equals operator */ - static EqualsSearchOperator equals(final FieldSearchPath path, @Nullable final Number value) { - if (value == null) { - return new SearchConstructibleBsonElement("equals", new Document("path", notNull("path", path).toValue()) - .append("value", BsonNull.VALUE)); - } + static EqualsSearchOperator equals(final FieldSearchPath path, final Number value) { return new SearchConstructibleBsonElement("equals", new Document("path", notNull("path", path).toValue()) - .append("value", value)); + .append("value", notNull("value", value))); } /** @@ -357,13 +346,9 @@ static EqualsSearchOperator equals(final FieldSearchPath path, @Nullable final N * @return The requested {@link SearchOperator}. * @mongodb.atlas.manual atlas-search/equals/ equals operator */ - static EqualsSearchOperator equals(final FieldSearchPath path, @Nullable final Instant value) { - if (value == null) { - return new SearchConstructibleBsonElement("equals", new Document("path", notNull("path", path).toValue()) - .append("value", BsonNull.VALUE)); - } + static EqualsSearchOperator equals(final FieldSearchPath path, final Instant value) { return new SearchConstructibleBsonElement("equals", new Document("path", notNull("path", path).toValue()) - .append("value", value)); + .append("value", notNull("value", value))); } /** @@ -374,13 +359,9 @@ static EqualsSearchOperator equals(final FieldSearchPath path, @Nullable final I * @return The requested {@link SearchOperator}. * @mongodb.atlas.manual atlas-search/equals/ equals operator */ - static EqualsSearchOperator equals(final FieldSearchPath path, @Nullable final String value) { - if (value == null) { - return new SearchConstructibleBsonElement("equals", new Document("path", notNull("path", path).toValue()) - .append("value", BsonNull.VALUE)); - } + static EqualsSearchOperator equals(final FieldSearchPath path, final String value) { return new SearchConstructibleBsonElement("equals", new Document("path", notNull("path", path).toValue()) - .append("value", value)); + .append("value", notNull("value", value))); } /** @@ -391,15 +372,23 @@ static EqualsSearchOperator equals(final FieldSearchPath path, @Nullable final S * @return The requested {@link SearchOperator}. * @mongodb.atlas.manual atlas-search/equals/ equals operator */ - static EqualsSearchOperator equals(final FieldSearchPath path, @Nullable final UUID value) { - if (value == null) { - return new SearchConstructibleBsonElement("equals", new Document("path", notNull("path", path).toValue()) - .append("value", BsonNull.VALUE)); - } + static EqualsSearchOperator equals(final FieldSearchPath path, final UUID value) { return new SearchConstructibleBsonElement("equals", new Document("path", notNull("path", path).toValue()) .append("value", new BsonBinary(value))); } + /** + * Returns a {@link SearchOperator} that performs a search for documents containing an ordered sequence of terms. + * + * @param path The indexed field to be searched. + * @return The requested {@link SearchOperator}. + * @mongodb.atlas.manual atlas-search/equals/ equals operator + */ + static EqualsSearchOperator equalsNull(final FieldSearchPath path) { + return new SearchConstructibleBsonElement("equals", new Document("path", notNull("path", path).toValue()) + .append("value", BsonNull.VALUE)); + } + /** * Creates a {@link SearchOperator} from a {@link Bson} in situations when there is no builder method that better satisfies your needs. * This method cannot be used to validate the syntax. diff --git a/driver-core/src/test/functional/com/mongodb/client/model/search/AggregatesSearchIntegrationTest.java b/driver-core/src/test/functional/com/mongodb/client/model/search/AggregatesSearchIntegrationTest.java index 29de80dda32..38a14cf96b0 100644 --- a/driver-core/src/test/functional/com/mongodb/client/model/search/AggregatesSearchIntegrationTest.java +++ b/driver-core/src/test/functional/com/mongodb/client/model/search/AggregatesSearchIntegrationTest.java @@ -79,6 +79,7 @@ import static com.mongodb.client.model.search.SearchOperator.autocomplete; import static com.mongodb.client.model.search.SearchOperator.compound; import static com.mongodb.client.model.search.SearchOperator.dateRange; +import static com.mongodb.client.model.search.SearchOperator.equalsNull; import static com.mongodb.client.model.search.SearchOperator.exists; import static com.mongodb.client.model.search.SearchOperator.near; import static com.mongodb.client.model.search.SearchOperator.numberRange; @@ -608,7 +609,9 @@ private static Stream searchAndSearchMetaArgs() { dateRange(fieldPath("fieldName6")) .lte(Instant.ofEpochMilli(1)), near(0, 1.5, fieldPath("fieldName7"), fieldPath("fieldName8")), - near(Instant.ofEpochMilli(1), Duration.ofMillis(3), fieldPath("fieldName9")) + near(Instant.ofEpochMilli(1), Duration.ofMillis(3), fieldPath("fieldName9")), + SearchOperator.equals(fieldPath("fieldName10"), "term5"), + equalsNull(fieldPath("fieldName11")) )) .minimumShouldMatch(1) .mustNot(singleton( diff --git a/driver-core/src/test/unit/com/mongodb/client/model/search/SearchOperatorTest.java b/driver-core/src/test/unit/com/mongodb/client/model/search/SearchOperatorTest.java index 4e208c2f5d9..229515fe784 100644 --- a/driver-core/src/test/unit/com/mongodb/client/model/search/SearchOperatorTest.java +++ b/driver-core/src/test/unit/com/mongodb/client/model/search/SearchOperatorTest.java @@ -19,9 +19,6 @@ import com.mongodb.client.model.geojson.Point; import com.mongodb.client.model.geojson.Position; -import java.util.Date; -import java.util.Optional; - import java.util.UUID; import org.bson.BsonArray; @@ -596,10 +593,9 @@ void near() { void equals() { ObjectId id = new ObjectId(); UUID uuid = UUID.randomUUID(); - Optional optionalValue = Optional.ofNullable(null); assertAll( () -> assertThrows(IllegalArgumentException.class, () -> - // paths must not be empty + // path must not be empty SearchOperator.equals(null, "term") ), () -> assertEquals( @@ -637,10 +633,10 @@ void equals() { () -> assertEquals( new BsonDocument("equals", new BsonDocument("path", fieldPath("fieldName").toBsonValue()) - .append("value", new BsonDouble(1.0)) + .append("value", new BsonDouble(Double.MAX_VALUE)) ), SearchOperator.equals( - fieldPath("fieldName"), 1.0).toBsonDocument() + fieldPath("fieldName"), Double.MAX_VALUE).toBsonDocument() ), () -> assertEquals( new BsonDocument("equals", @@ -671,8 +667,7 @@ void equals() { new BsonDocument("path", fieldPath("fieldName").toBsonValue()) .append("value", BsonNull.VALUE) ), - SearchOperator.equals( - fieldPath("fieldName"), optionalValue.orElse(null)).toBsonDocument() + SearchOperator.equalsNull(fieldPath("fieldName")).toBsonDocument() ) ); } diff --git a/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala b/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala index 74603c5394e..079ed37f700 100644 --- a/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala +++ b/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala @@ -297,6 +297,17 @@ object SearchOperator { def equals(path: FieldSearchPath, value: UUID): EqualsSearchOperator = JSearchOperator.equals(path, value) + /** + * Returns a `SearchOperator` that performs a search for documents containing an ordered sequence of terms. + * + * @param path The indexed field to be searched. + * @param value The uuid value to query for. + * @return The requested `SearchOperator`. + * @see [[https://www.mongodb.com/docs/atlas/atlas-search/equals/ equals operator]] + */ + def equalsNull(path: FieldSearchPath): EqualsSearchOperator = + JSearchOperator.equalsNull(path) + /** * Creates a `SearchOperator` from a `Bson` in situations when there is no builder method that better satisfies your needs. * This method cannot be used to validate the syntax. From 91124c15fc005ec190e1d28225abde524776e8aa Mon Sep 17 00:00:00 2001 From: Joy Kim Date: Tue, 14 Jan 2025 14:16:32 -0500 Subject: [PATCH 07/13] add int test --- .../client/model/search/AggregatesSearchIntegrationTest.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/driver-core/src/test/functional/com/mongodb/client/model/search/AggregatesSearchIntegrationTest.java b/driver-core/src/test/functional/com/mongodb/client/model/search/AggregatesSearchIntegrationTest.java index 0dd8ab387d2..9789720b3c3 100644 --- a/driver-core/src/test/functional/com/mongodb/client/model/search/AggregatesSearchIntegrationTest.java +++ b/driver-core/src/test/functional/com/mongodb/client/model/search/AggregatesSearchIntegrationTest.java @@ -79,6 +79,7 @@ import static com.mongodb.client.model.search.SearchOperator.autocomplete; import static com.mongodb.client.model.search.SearchOperator.compound; import static com.mongodb.client.model.search.SearchOperator.dateRange; +import static com.mongodb.client.model.search.SearchOperator.equalsNull; import static com.mongodb.client.model.search.SearchOperator.exists; import static com.mongodb.client.model.search.SearchOperator.near; import static com.mongodb.client.model.search.SearchOperator.numberRange; @@ -610,7 +611,9 @@ private static Stream searchAndSearchMetaArgs() { .lte(Instant.ofEpochMilli(1)), near(0, 1.5, fieldPath("fieldName7"), fieldPath("fieldName8")), near(Instant.ofEpochMilli(1), Duration.ofMillis(3), fieldPath("fieldName9")), - phrase(fieldPath("fieldName10"), "term6") + phrase(fieldPath("fieldName10"), "term6"), + SearchOperator.equals(fieldPath("fieldName11"), "term7"), + equalsNull(fieldPath("fieldName12")) )) .minimumShouldMatch(1) .mustNot(singleton( From b268eabd4e70c773dc676d8bc98be84eaa5fda80 Mon Sep 17 00:00:00 2001 From: Joy Kim Date: Tue, 14 Jan 2025 14:26:15 -0500 Subject: [PATCH 08/13] fix --- .../client/model/search/SearchOperator.java | 17 ++++++++++------- driver-kotlin-extensions/build.gradle.kts | 4 +--- .../scala/model/search/SearchOperator.scala | 17 ++++++++++------- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java b/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java index 2fb673227a2..b4f71385921 100644 --- a/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java +++ b/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java @@ -300,7 +300,7 @@ static GeoNearSearchOperator near(final Point origin, final Number pivot, final } /** - * Returns a {@link SearchOperator} that performs a search for documents containing an ordered sequence of terms. + * Returns a {@link SearchOperator} that checks whether a field matches a value you specify. * * @param path The indexed field to be searched. * @param value The boolean value to query for. @@ -313,7 +313,7 @@ static EqualsSearchOperator equals(final FieldSearchPath path, final boolean val } /** - * Returns a {@link SearchOperator} that performs a search for documents containing an ordered sequence of terms. + * Returns a {@link SearchOperator} that checks whether a field matches a value you specify. * * @param path The indexed field to be searched. * @param value The object id value to query for. @@ -326,7 +326,7 @@ static EqualsSearchOperator equals(final FieldSearchPath path, final ObjectId va } /** - * Returns a {@link SearchOperator} that performs a search for documents containing an ordered sequence of terms. + * Returns a {@link SearchOperator} that checks whether a field matches a value you specify. * * @param path The indexed field to be searched. * @param value The number value to query for. @@ -339,7 +339,7 @@ static EqualsSearchOperator equals(final FieldSearchPath path, final Number valu } /** - * Returns a {@link SearchOperator} that performs a search for documents containing an ordered sequence of terms. + * Returns a {@link SearchOperator} that checks whether a field matches a value you specify. * * @param path The indexed field to be searched. * @param value The instant date value to query for. @@ -352,7 +352,7 @@ static EqualsSearchOperator equals(final FieldSearchPath path, final Instant val } /** - * Returns a {@link SearchOperator} that performs a search for documents containing an ordered sequence of terms. + * Returns a {@link SearchOperator} that checks whether a field matches a value you specify. * * @param path The indexed field to be searched. * @param value The string value to query for. @@ -365,7 +365,7 @@ static EqualsSearchOperator equals(final FieldSearchPath path, final String valu } /** - * Returns a {@link SearchOperator} that performs a search for documents containing an ordered sequence of terms. + * Returns a {@link SearchOperator} that checks whether a field matches a value you specify. * * @param path The indexed field to be searched. * @param value The uuid value to query for. @@ -378,7 +378,7 @@ static EqualsSearchOperator equals(final FieldSearchPath path, final UUID value) } /** - * Returns a {@link SearchOperator} that performs a search for documents containing an ordered sequence of terms. + * Returns a {@link SearchOperator} that checks whether a field matches null. * * @param path The indexed field to be searched. * @return The requested {@link SearchOperator}. @@ -390,6 +390,8 @@ static EqualsSearchOperator equalsNull(final FieldSearchPath path) { } /** + * Returns a {@link SearchOperator} that performs a search for documents containing an ordered sequence of terms. + * * @param path The field to be searched. * @param query The string to search for. * @return The requested {@link SearchOperator}. @@ -400,6 +402,7 @@ static PhraseSearchOperator phrase(final SearchPath path, final String query) { } /** + * Returns a {@link SearchOperator} that performs a search for documents containing an ordered sequence of terms. * @param paths The non-empty fields to be searched. * @param queries The non-empty strings to search for. * @return The requested {@link SearchOperator}. diff --git a/driver-kotlin-extensions/build.gradle.kts b/driver-kotlin-extensions/build.gradle.kts index 76f36ca33b2..e0192fa5abc 100644 --- a/driver-kotlin-extensions/build.gradle.kts +++ b/driver-kotlin-extensions/build.gradle.kts @@ -165,6 +165,4 @@ tasks.javadocJar.configure { // =========================== tasks.sourcesJar { from(project.sourceSets.main.map { it.kotlin }) } -afterEvaluate { - tasks.jar { manifest { attributes["Automatic-Module-Name"] = "org.mongodb.driver.kotlin.extensions" } } -} +afterEvaluate { tasks.jar { manifest { attributes["Automatic-Module-Name"] = "org.mongodb.driver.kotlin.extensions" } } } diff --git a/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala b/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala index a87331533be..12413b01da8 100644 --- a/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala +++ b/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala @@ -232,7 +232,7 @@ object SearchOperator { JSearchOperator.near(origin, pivot, paths.asJava) /** - * Returns a `SearchOperator` that performs a search for documents containing an ordered sequence of terms. + * Returns a `SearchOperator` that checks whether a field matches a value you specify. * * @param path The indexed field to be searched. * @param value The boolean value to query for. @@ -243,7 +243,7 @@ object SearchOperator { JSearchOperator.equals(path, value) /** - * Returns a `SearchOperator` that performs a search for documents containing an ordered sequence of terms. + * Returns a `SearchOperator` that checks whether a field matches a value you specify. * * @param path The indexed field to be searched. * @param value The object id value to query for. @@ -254,7 +254,7 @@ object SearchOperator { JSearchOperator.equals(path, value) /** - * Returns a `SearchOperator` that performs a search for documents containing an ordered sequence of terms. + * Returns a `SearchOperator` that checks whether a field matches a value you specify. * * @param path The indexed field to be searched. * @param value The number value to query for. @@ -265,7 +265,7 @@ object SearchOperator { JSearchOperator.equals(path, value) /** - * Returns a `SearchOperator` that performs a search for documents containing an ordered sequence of terms. + * Returns a `SearchOperator` that checks whether a field matches a value you specify. * * @param path The indexed field to be searched. * @param value The instant date value to query for. @@ -276,7 +276,7 @@ object SearchOperator { JSearchOperator.equals(path, value) /** - * Returns a `SearchOperator` that performs a search for documents containing an ordered sequence of terms. + * Returns a `SearchOperator` that checks whether a field matches a value you specify. * * @param path The indexed field to be searched. * @param value The string value to query for. @@ -287,7 +287,7 @@ object SearchOperator { JSearchOperator.equals(path, value) /** - * Returns a `SearchOperator` that performs a search for documents containing an ordered sequence of terms. + * Returns a `SearchOperator` that checks whether a field matches a value you specify. * * @param path The indexed field to be searched. * @param value The uuid value to query for. @@ -298,7 +298,7 @@ object SearchOperator { JSearchOperator.equals(path, value) /** - * Returns a `SearchOperator` that performs a search for documents containing an ordered sequence of terms. + * Returns a `SearchOperator` that checks whether a field matches null. * * @param path The indexed field to be searched. * @param value The uuid value to query for. @@ -309,6 +309,8 @@ object SearchOperator { JSearchOperator.equalsNull(path) /** + * Returns a {@link SearchOperator} that performs a search for documents containing an ordered sequence of terms. + * * @param path The field to be searched. * @param query The string to search for. * @return The requested `SearchOperator`. @@ -317,6 +319,7 @@ object SearchOperator { def phrase(path: SearchPath, query: String): PhraseSearchOperator = JSearchOperator.phrase(path, query) /** + * Returns a {@link SearchOperator} that performs a search for documents containing an ordered sequence of terms. * @param paths The non-empty fields to be searched. * @param queries The non-empty strings to search for. * @return The requested `SearchOperator`. From 753eaaf0fe6ad5e5d3c6f3c10de9bb603c6abb1c Mon Sep 17 00:00:00 2001 From: Joy Kim Date: Tue, 14 Jan 2025 14:29:02 -0500 Subject: [PATCH 09/13] fix --- .../src/main/com/mongodb/client/model/search/SearchOperator.java | 1 + .../scala/org/mongodb/scala/model/search/SearchOperator.scala | 1 + 2 files changed, 2 insertions(+) diff --git a/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java b/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java index b4f71385921..9bd593a4029 100644 --- a/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java +++ b/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java @@ -403,6 +403,7 @@ static PhraseSearchOperator phrase(final SearchPath path, final String query) { /** * Returns a {@link SearchOperator} that performs a search for documents containing an ordered sequence of terms. + * * @param paths The non-empty fields to be searched. * @param queries The non-empty strings to search for. * @return The requested {@link SearchOperator}. diff --git a/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala b/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala index 12413b01da8..105e2e4d87c 100644 --- a/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala +++ b/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala @@ -320,6 +320,7 @@ object SearchOperator { /** * Returns a {@link SearchOperator} that performs a search for documents containing an ordered sequence of terms. + * * @param paths The non-empty fields to be searched. * @param queries The non-empty strings to search for. * @return The requested `SearchOperator`. From 97ffc96ba4a11ec5aaa74ca84ee2c965ee0c50a4 Mon Sep 17 00:00:00 2001 From: Joy Kim Date: Tue, 14 Jan 2025 14:29:56 -0500 Subject: [PATCH 10/13] fix --- .../scala/org/mongodb/scala/model/search/SearchOperator.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala b/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala index 105e2e4d87c..cbab4184496 100644 --- a/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala +++ b/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala @@ -309,7 +309,7 @@ object SearchOperator { JSearchOperator.equalsNull(path) /** - * Returns a {@link SearchOperator} that performs a search for documents containing an ordered sequence of terms. + * Returns a `SearchOperator` that performs a search for documents containing an ordered sequence of terms. * * @param path The field to be searched. * @param query The string to search for. @@ -319,7 +319,7 @@ object SearchOperator { def phrase(path: SearchPath, query: String): PhraseSearchOperator = JSearchOperator.phrase(path, query) /** - * Returns a {@link SearchOperator} that performs a search for documents containing an ordered sequence of terms. + * Returns a `SearchOperator` that performs a search for documents containing an ordered sequence of terms. * * @param paths The non-empty fields to be searched. * @param queries The non-empty strings to search for. From 0f21398cccd5eecf33c9cd6e2206ff81353a9212 Mon Sep 17 00:00:00 2001 From: Joy Kim Date: Tue, 14 Jan 2025 14:32:04 -0500 Subject: [PATCH 11/13] fix --- .../com/mongodb/client/model/search/EqualsSearchOperator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/driver-core/src/main/com/mongodb/client/model/search/EqualsSearchOperator.java b/driver-core/src/main/com/mongodb/client/model/search/EqualsSearchOperator.java index 69935d8f02e..b3aa4c278ea 100644 --- a/driver-core/src/main/com/mongodb/client/model/search/EqualsSearchOperator.java +++ b/driver-core/src/main/com/mongodb/client/model/search/EqualsSearchOperator.java @@ -39,5 +39,5 @@ @Beta(Reason.CLIENT) public interface EqualsSearchOperator extends SearchOperator { @Override - TextSearchOperator score(SearchScore modifier); + EqualsSearchOperator score(SearchScore modifier); } From 1b21d5c1f53c86d8bc3e4f4acb0cccd32f4edef2 Mon Sep 17 00:00:00 2001 From: Joy Kim Date: Wed, 15 Jan 2025 15:39:55 -0500 Subject: [PATCH 12/13] fix checkstyle --- driver-kotlin-extensions/build.gradle.kts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/driver-kotlin-extensions/build.gradle.kts b/driver-kotlin-extensions/build.gradle.kts index e0192fa5abc..76f36ca33b2 100644 --- a/driver-kotlin-extensions/build.gradle.kts +++ b/driver-kotlin-extensions/build.gradle.kts @@ -165,4 +165,6 @@ tasks.javadocJar.configure { // =========================== tasks.sourcesJar { from(project.sourceSets.main.map { it.kotlin }) } -afterEvaluate { tasks.jar { manifest { attributes["Automatic-Module-Name"] = "org.mongodb.driver.kotlin.extensions" } } } +afterEvaluate { + tasks.jar { manifest { attributes["Automatic-Module-Name"] = "org.mongodb.driver.kotlin.extensions" } } +} From 013310aad0e4bdbea8f2560afcac55a06b80ec13 Mon Sep 17 00:00:00 2001 From: Maxim Katcharov Date: Fri, 24 Jan 2025 09:34:50 -0700 Subject: [PATCH 13/13] Clarify docs --- .../client/model/search/SearchOperator.java | 14 +++++++------- .../scala/model/search/SearchOperator.scala | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java b/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java index 32c859bbd1b..e457454db0c 100644 --- a/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java +++ b/driver-core/src/main/com/mongodb/client/model/search/SearchOperator.java @@ -301,7 +301,7 @@ static GeoNearSearchOperator near(final Point origin, final Number pivot, final } /** - * Returns a {@link SearchOperator} that checks whether a field matches a value you specify. + * Returns a {@link SearchOperator} that searches for documents where a field matches the specified value. * * @param path The indexed field to be searched. * @param value The boolean value to query for. @@ -314,7 +314,7 @@ static EqualsSearchOperator equals(final FieldSearchPath path, final boolean val } /** - * Returns a {@link SearchOperator} that checks whether a field matches a value you specify. + * Returns a {@link SearchOperator} that searches for documents where a field matches the specified value. * * @param path The indexed field to be searched. * @param value The object id value to query for. @@ -327,7 +327,7 @@ static EqualsSearchOperator equals(final FieldSearchPath path, final ObjectId va } /** - * Returns a {@link SearchOperator} that checks whether a field matches a value you specify. + * Returns a {@link SearchOperator} that searches for documents where a field matches the specified value. * * @param path The indexed field to be searched. * @param value The number value to query for. @@ -340,7 +340,7 @@ static EqualsSearchOperator equals(final FieldSearchPath path, final Number valu } /** - * Returns a {@link SearchOperator} that checks whether a field matches a value you specify. + * Returns a {@link SearchOperator} that searches for documents where a field matches the specified value. * * @param path The indexed field to be searched. * @param value The instant date value to query for. @@ -353,7 +353,7 @@ static EqualsSearchOperator equals(final FieldSearchPath path, final Instant val } /** - * Returns a {@link SearchOperator} that checks whether a field matches a value you specify. + * Returns a {@link SearchOperator} that searches for documents where a field matches the specified value. * * @param path The indexed field to be searched. * @param value The string value to query for. @@ -366,7 +366,7 @@ static EqualsSearchOperator equals(final FieldSearchPath path, final String valu } /** - * Returns a {@link SearchOperator} that checks whether a field matches a value you specify. + * Returns a {@link SearchOperator} that searches for documents where a field matches the specified value. * * @param path The indexed field to be searched. * @param value The uuid value to query for. @@ -379,7 +379,7 @@ static EqualsSearchOperator equals(final FieldSearchPath path, final UUID value) } /** - * Returns a {@link SearchOperator} that checks whether a field matches null. + * Returns a {@link SearchOperator} that searches for documents where a field matches null. * * @param path The indexed field to be searched. * @return The requested {@link SearchOperator}. diff --git a/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala b/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala index 4d31e3fc759..500724d4d31 100644 --- a/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala +++ b/driver-scala/src/main/scala/org/mongodb/scala/model/search/SearchOperator.scala @@ -233,7 +233,7 @@ object SearchOperator { JSearchOperator.near(origin, pivot, paths.asJava) /** - * Returns a `SearchOperator` that checks whether a field matches a value you specify. + * Returns a `SearchOperator` that searches for documents where a field matches the specified value. * * @param path The indexed field to be searched. * @param value The boolean value to query for. @@ -244,7 +244,7 @@ object SearchOperator { JSearchOperator.equals(path, value) /** - * Returns a `SearchOperator` that checks whether a field matches a value you specify. + * Returns a `SearchOperator` that searches for documents where a field matches the specified value. * * @param path The indexed field to be searched. * @param value The object id value to query for. @@ -255,7 +255,7 @@ object SearchOperator { JSearchOperator.equals(path, value) /** - * Returns a `SearchOperator` that checks whether a field matches a value you specify. + * Returns a `SearchOperator` that searches for documents where a field matches the specified value. * * @param path The indexed field to be searched. * @param value The number value to query for. @@ -266,7 +266,7 @@ object SearchOperator { JSearchOperator.equals(path, value) /** - * Returns a `SearchOperator` that checks whether a field matches a value you specify. + * Returns a `SearchOperator` that searches for documents where a field matches the specified value. * * @param path The indexed field to be searched. * @param value The instant date value to query for. @@ -277,7 +277,7 @@ object SearchOperator { JSearchOperator.equals(path, value) /** - * Returns a `SearchOperator` that checks whether a field matches a value you specify. + * Returns a `SearchOperator` that searches for documents where a field matches the specified value. * * @param path The indexed field to be searched. * @param value The string value to query for. @@ -288,7 +288,7 @@ object SearchOperator { JSearchOperator.equals(path, value) /** - * Returns a `SearchOperator` that checks whether a field matches a value you specify. + * Returns a `SearchOperator` that searches for documents where a field matches the specified value. * * @param path The indexed field to be searched. * @param value The uuid value to query for. @@ -299,7 +299,7 @@ object SearchOperator { JSearchOperator.equals(path, value) /** - * Returns a `SearchOperator` that checks whether a field matches null. + * Returns a `SearchOperator` that searches for documents where a field matches null. * * @param path The indexed field to be searched. * @param value The uuid value to query for.