diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoOperations.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoOperations.java index 88cf6d1d1..df3afd769 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoOperations.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoOperations.java @@ -15,7 +15,6 @@ */ package org.springframework.data.mongodb.core; -import javax.validation.constraints.Null; import java.util.Collection; import java.util.List; import java.util.Set; @@ -77,6 +76,7 @@ public interface MongoOperations extends FluentMongoOperations { * converted into Spring's DAO exception hierarchy. * * @param jsonCommand a MongoDB command expressed as a JSON string. + * @return a result object returned by the action. */ Document executeCommand(String jsonCommand); @@ -84,7 +84,8 @@ public interface MongoOperations extends FluentMongoOperations { * Execute a MongoDB command. Any errors that result from executing this command will be converted into Spring's DAO * exception hierarchy. * - * @param command a MongoDB command + * @param command a MongoDB command. + * @return a result object returned by the action. */ Document executeCommand(Document command); @@ -94,7 +95,7 @@ public interface MongoOperations extends FluentMongoOperations { * * @param command a MongoDB command, must not be {@literal null}. * @param readPreference read preferences to use, can be {@literal null}. - * @return + * @return a result object returned by the action. * @since 1.7 */ Document executeCommand(Document command, @Nullable ReadPreference readPreference); @@ -103,9 +104,9 @@ public interface MongoOperations extends FluentMongoOperations { * Execute a MongoDB query and iterate over the query results on a per-document basis with a DocumentCallbackHandler. * * @param query the query class that specifies the criteria used to find a record and also an optional fields - * specification - * @param collectionName name of the collection to retrieve the objects from - * @param dch the handler that will extract results, one document at a time + * specification. Must not be {@literal null}. + * @param collectionName name of the collection to retrieve the objects from. + * @param dch the handler that will extract results, one document at a time. */ void executeQuery(Query query, String collectionName, DocumentCallbackHandler dch); @@ -116,7 +117,7 @@ public interface MongoOperations extends FluentMongoOperations { * * @param action callback object that specifies the MongoDB actions to perform on the passed in DB instance. Must not * be {@literal null}. - * @param return type + * @param return type. * @return a result object returned by the action or {@literal null}. */ @Nullable @@ -127,9 +128,9 @@ public interface MongoOperations extends FluentMongoOperations { *

* Allows for returning a result object, that is a domain object or a collection of domain objects. * - * @param return type * @param entityClass class that determines the collection to use. Must not be {@literal null}. * @param action callback object that specifies the MongoDB action. Must not be {@literal null}. + * @param return type. * @return a result object returned by the action or {@literal null}. */ @Nullable @@ -140,10 +141,10 @@ public interface MongoOperations extends FluentMongoOperations { *

* Allows for returning a result object, that is a domain object or a collection of domain objects. * - * @param return type - * @param collectionName the name of the collection that specifies which DBCollection instance will be passed into. - * Must not be {@literal null} or empty. + * @param collectionName the name of the collection that specifies which {@link MongoCollection} instance will be + * passed into. Must not be {@literal null} or empty. * @param action callback object that specifies the MongoDB action the callback action. Must not be {@literal null}. + * @param return type. * @return a result object returned by the action or {@literal null}. */ @Nullable @@ -155,9 +156,10 @@ public interface MongoOperations extends FluentMongoOperations { *

* Returns a {@link CloseableIterator} that wraps the a Mongo DB {@link Cursor} that needs to be closed. * - * @param element return type - * @param query must not be {@literal null}. + * @param query the query class that specifies the criteria used to find a record and also an optional fields + * specification. Must not be {@literal null}. * @param entityType must not be {@literal null}. + * @param element return type * @return will never be {@literal null}. * @since 1.7 */ @@ -169,10 +171,11 @@ public interface MongoOperations extends FluentMongoOperations { *

* Returns a {@link CloseableIterator} that wraps the a Mongo DB {@link Cursor} that needs to be closed. * - * @param element return type - * @param query must not be {@literal null}. + * @param query the query class that specifies the criteria used to find a record and also an optional fields + * specification. Must not be {@literal null}. * @param entityType must not be {@literal null}. * @param collectionName must not be {@literal null} or empty. + * @param element return type * @return will never be {@literal null}. * @since 1.10 */ @@ -181,8 +184,8 @@ public interface MongoOperations extends FluentMongoOperations { /** * Create an uncapped collection with a name based on the provided entity class. * - * @param entityClass class that determines the collection to create - * @return the created collection + * @param entityClass class that determines the collection to create. + * @return the created collection. */ MongoCollection createCollection(Class entityClass); @@ -191,15 +194,15 @@ public interface MongoOperations extends FluentMongoOperations { * * @param entityClass class that determines the collection to create. Must not be {@literal null}. * @param collectionOptions options to use when creating the collection. - * @return the created collection + * @return the created collection. */ MongoCollection createCollection(Class entityClass, @Nullable CollectionOptions collectionOptions); /** * Create an uncapped collection with the provided name. * - * @param collectionName name of the collection - * @return the created collection + * @param collectionName name of the collection. + * @return the created collection. */ MongoCollection createCollection(String collectionName); @@ -208,14 +211,14 @@ public interface MongoOperations extends FluentMongoOperations { * * @param collectionName name of the collection. Must not be {@literal null} nor empty. * @param collectionOptions options to use when creating the collection. - * @return the created collection + * @return the created collection. */ MongoCollection createCollection(String collectionName, @Nullable CollectionOptions collectionOptions); /** * A set of collection names. * - * @return list of collection names + * @return list of collection names. */ Set getCollectionNames(); @@ -324,13 +327,13 @@ public interface MongoOperations extends FluentMongoOperations { * Query for a list of objects of type T from the collection used by the entity class. *

* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless - * configured otherwise, an instance of MappingMongoConverter will be used. + * configured otherwise, an instance of {@link MappingMongoConverter} will be used. *

* If your collection does not contain a homogeneous collection of types, this operation will not be an efficient way * to map objects since the test for class type is done in the client and not on the server. * - * @param entityClass the parametrized type of the returned list - * @return the converted collection + * @param entityClass the parametrized type of the returned list. + * @return the converted collection. */ List findAll(Class entityClass); @@ -338,14 +341,14 @@ public interface MongoOperations extends FluentMongoOperations { * Query for a list of objects of type T from the specified collection. *

* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless - * configured otherwise, an instance of MappingMongoConverter will be used. + * configured otherwise, an instance of {@link MappingMongoConverter} will be used. *

* If your collection does not contain a homogeneous collection of types, this operation will not be an efficient way * to map objects since the test for class type is done in the client and not on the server. * * @param entityClass the parametrized type of the returned list. - * @param collectionName name of the collection to retrieve the objects from - * @return the converted collection + * @param collectionName name of the collection to retrieve the objects from. + * @return the converted collection. */ List findAll(Class entityClass, String collectionName); @@ -376,7 +379,8 @@ public interface MongoOperations extends FluentMongoOperations { * @param entityClass The parametrized type of the returned list * @return The results of the group operation */ - GroupByResults group(@Nullable Criteria criteria, String inputCollectionName, GroupBy groupBy, Class entityClass); + GroupByResults group(@Nullable Criteria criteria, String inputCollectionName, GroupBy groupBy, + Class entityClass); /** * Execute an aggregation operation. The raw results will be mapped to the given entity class. The name of the @@ -587,15 +591,15 @@ public interface MongoOperations extends FluentMongoOperations { * specified type. *

* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless - * configured otherwise, an instance of MappingMongoConverter will be used. + * configured otherwise, an instance of {@link MappingMongoConverter} will be used. *

* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more * feature rich {@link Query}. * * @param query the query class that specifies the criteria used to find a record and also an optional fields - * specification + * specification. * @param entityClass the parametrized type of the returned list. - * @return the converted object + * @return the converted object. */ @Nullable T findOne(Query query, Class entityClass); @@ -605,16 +609,16 @@ public interface MongoOperations extends FluentMongoOperations { * type. *

* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless - * configured otherwise, an instance of MappingMongoConverter will be used. + * configured otherwise, an instance of {@link MappingMongoConverter} will be used. *

* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more * feature rich {@link Query}. * * @param query the query class that specifies the criteria used to find a record and also an optional fields - * specification + * specification. * @param entityClass the parametrized type of the returned list. - * @param collectionName name of the collection to retrieve the objects from - * @return the converted object + * @param collectionName name of the collection to retrieve the objects from. + * @return the converted object. */ @Nullable T findOne(Query query, Class entityClass, String collectionName); @@ -626,7 +630,7 @@ public interface MongoOperations extends FluentMongoOperations { * * @param query the {@link Query} class that specifies the criteria used to find a record. * @param collectionName name of the collection to check for objects. - * @return + * @return {@literal true} if the query yields a result. */ boolean exists(Query query, String collectionName); @@ -635,7 +639,7 @@ public interface MongoOperations extends FluentMongoOperations { * * @param query the {@link Query} class that specifies the criteria used to find a record. * @param entityClass the parametrized type. - * @return + * @return {@literal true} if the query yields a result. */ boolean exists(Query query, Class entityClass); @@ -645,7 +649,7 @@ public interface MongoOperations extends FluentMongoOperations { * @param query the {@link Query} class that specifies the criteria used to find a record. * @param entityClass the parametrized type. Can be {@literal null}. * @param collectionName name of the collection to check for objects. - * @return + * @return {@literal true} if the query yields a result. */ boolean exists(Query query, @Nullable Class entityClass, String collectionName); @@ -653,7 +657,7 @@ public interface MongoOperations extends FluentMongoOperations { * Map the results of an ad-hoc query on the collection for the entity class to a List of the specified type. *

* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless - * configured otherwise, an instance of MappingMongoConverter will be used. + * configured otherwise, an instance of {@link MappingMongoConverter} will be used. *

* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more * feature rich {@link Query}. @@ -661,7 +665,7 @@ public interface MongoOperations extends FluentMongoOperations { * @param query the query class that specifies the criteria used to find a record and also an optional fields * specification. Must not be {@literal null}. * @param entityClass the parametrized type of the returned list. Must not be {@literal null}. - * @return the List of converted objects + * @return the List of converted objects. */ List find(Query query, Class entityClass); @@ -669,7 +673,7 @@ public interface MongoOperations extends FluentMongoOperations { * Map the results of an ad-hoc query on the specified collection to a List of the specified type. *

* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless - * configured otherwise, an instance of MappingMongoConverter will be used. + * configured otherwise, an instance of {@link MappingMongoConverter} will be used. *

* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more * feature rich {@link Query}. @@ -678,7 +682,7 @@ public interface MongoOperations extends FluentMongoOperations { * specification. Must not be {@literal null}. * @param entityClass the parametrized type of the returned list. Must not be {@literal null}. * @param collectionName name of the collection to retrieve the objects from. Must not be {@literal null}. - * @return the List of converted objects + * @return the List of converted objects. */ List find(Query query, Class entityClass, String collectionName); @@ -686,7 +690,6 @@ public interface MongoOperations extends FluentMongoOperations { * Returns a document with the given id mapped onto the given class. The collection the query is ran against will be * derived from the given target class as well. * - * @param * @param id the id of the document to return. Must not be {@literal null}. * @param entityClass the type the document shall be converted into. Must not be {@literal null}. * @return the document with the given id mapped onto the given target class. @@ -697,30 +700,29 @@ public interface MongoOperations extends FluentMongoOperations { /** * Returns the document with the given id from the given collection mapped onto the given target class. * - * @param id the id of the document to return - * @param entityClass the type to convert the document to - * @param collectionName the collection to query for the document - * @param - * @return {@literal null} if document does not exist. + * @param id the id of the document to return. + * @param entityClass the type to convert the document to. + * @param collectionName the collection to query for the document. + * @return he converted object or {@literal null} if document does not exist. */ @Nullable T findById(Object id, Class entityClass, String collectionName); /** - * Triggers findAndModify + * Triggers findAndModify * to apply provided {@link Update} on documents matching {@link Criteria} of given {@link Query}. * * @param query the {@link Query} class that specifies the {@link Criteria} used to find a record and also an optional * fields specification. Must not be {@literal null}. * @param update the {@link Update} to apply on matching documents. Must not be {@literal null}. * @param entityClass the parametrized type. Must not be {@literal null}. - * @return {@literal null} if not found. + * @return the converted object that was updated before it was updated or {@literal null}, if not found. */ @Nullable T findAndModify(Query query, Update update, Class entityClass); /** - * Triggers findAndModify + * Triggers findAndModify * to apply provided {@link Update} on documents matching {@link Criteria} of given {@link Query}. * * @param query the {@link Query} class that specifies the {@link Criteria} used to find a record and also an optional @@ -728,13 +730,13 @@ public interface MongoOperations extends FluentMongoOperations { * @param update the {@link Update} to apply on matching documents. Must not be {@literal null}. * @param entityClass the parametrized type. Must not be {@literal null}. * @param collectionName the collection to query. Must not be {@literal null}. - * @return {@literal null} if not found. + * @return the converted object that was updated before it was updated or {@literal null}, if not found. */ @Nullable T findAndModify(Query query, Update update, Class entityClass, String collectionName); /** - * Triggers findAndModify + * Triggers findAndModify * to apply provided {@link Update} on documents matching {@link Criteria} of given {@link Query} taking * {@link FindAndModifyOptions} into account. * @@ -743,13 +745,15 @@ public interface MongoOperations extends FluentMongoOperations { * @param update the {@link Update} to apply on matching documents. * @param options the {@link FindAndModifyOptions} holding additional information. * @param entityClass the parametrized type. - * @return {@literal null} if not found. + * @return the converted object that was updated or {@literal null}, if not found. Depending on the value of + * {@link FindAndModifyOptions#isReturnNew()} this will either be the object as it was before the update or as + * it is after the update. */ @Nullable T findAndModify(Query query, Update update, FindAndModifyOptions options, Class entityClass); /** - * Triggers findAndModify + * Triggers findAndModify * to apply provided {@link Update} on documents matching {@link Criteria} of given {@link Query} taking * {@link FindAndModifyOptions} into account. * @@ -759,7 +763,9 @@ public interface MongoOperations extends FluentMongoOperations { * @param options the {@link FindAndModifyOptions} holding additional information. Must not be {@literal null}. * @param entityClass the parametrized type. Must not be {@literal null}. * @param collectionName the collection to query. Must not be {@literal null}. - * @return {@literal null} if not found. + * @return the converted object that was updated or {@literal null}, if not found. Depending on the value of + * {@link FindAndModifyOptions#isReturnNew()} this will either be the object as it was before the update or as + * it is after the update. */ @Nullable T findAndModify(Query query, Update update, FindAndModifyOptions options, Class entityClass, @@ -776,7 +782,7 @@ public interface MongoOperations extends FluentMongoOperations { * feature rich {@link Query}. * * @param query the query class that specifies the criteria used to find a record and also an optional fields - * specification + * specification. * @param entityClass the parametrized type of the returned list. * @return the converted object */ @@ -788,16 +794,16 @@ public interface MongoOperations extends FluentMongoOperations { * type. The first document that matches the query is returned and also removed from the collection in the database. *

* The object is converted from the MongoDB native representation using an instance of {@see MongoConverter}. Unless - * configured otherwise, an instance of MappingMongoConverter will be used. + * configured otherwise, an instance of {@link MappingMongoConverter} will be used. *

* The query is specified as a {@link Query} which can be created either using the {@link BasicQuery} or the more * feature rich {@link Query}. * * @param query the query class that specifies the criteria used to find a record and also an optional fields - * specification + * specification. * @param entityClass the parametrized type of the returned list. - * @param collectionName name of the collection to retrieve the objects from - * @return the converted object + * @param collectionName name of the collection to retrieve the objects from. + * @return the converted object. */ @Nullable T findAndRemove(Query query, Class entityClass, String collectionName); @@ -805,9 +811,10 @@ public interface MongoOperations extends FluentMongoOperations { /** * Returns the number of documents for the given {@link Query} by querying the collection of the given entity class. * - * @param query must not be {@literal null}. - * @param entityClass must not be {@literal null}. - * @return + * @param query the {@link Query} class that specifies the criteria used to find documents. Must not be + * {@literal null}. + * @param entityClass class that determines the collection to use. Must not be {@literal null}. + * @return the count of matching documents. */ long count(Query query, Class entityClass); @@ -816,9 +823,9 @@ public interface MongoOperations extends FluentMongoOperations { * must solely consist of document field references as we lack type information to map potential property references * onto document fields. Use {@link #count(Query, Class, String)} to get full type specific support. * - * @param query must not be {@literal null}. + * @param query the {@link Query} class that specifies the criteria used to find documents. * @param collectionName must not be {@literal null} or empty. - * @return + * @return the count of matching documents. * @see #count(Query, Class, String) */ long count(Query query, String collectionName); @@ -827,10 +834,11 @@ public interface MongoOperations extends FluentMongoOperations { * Returns the number of documents for the given {@link Query} by querying the given collection using the given entity * class to map the given {@link Query}. * - * @param query must not be {@literal null}. - * @param entityClass can be be {@literal null}. + * @param query the {@link Query} class that specifies the criteria used to find documents. Must not be + * {@literal null}. + * @param entityClass the parametrized type. Can be {@literal null}. * @param collectionName must not be {@literal null} or empty. - * @return + * @return the count of matching documents. */ long count(Query query, @Nullable Class entityClass, String collectionName); @@ -856,7 +864,7 @@ public interface MongoOperations extends FluentMongoOperations { * Insert the object into the specified collection. *

* The object is converted to the MongoDB native representation using an instance of {@see MongoConverter}. Unless - * configured otherwise, an instance of MappingMongoConverter will be used. + * configured otherwise, an instance of {@link MappingMongoConverter} will be used. *

* Insert is used to initially store the object into the database. To update an existing object use the save method. * @@ -868,13 +876,13 @@ public interface MongoOperations extends FluentMongoOperations { /** * Insert a Collection of objects into a collection in a single batch write to the database. * - * @param batchToSave the list of objects to save. Must not be {@literal null}. + * @param batchToSave the batch of objects to save. Must not be {@literal null}. * @param entityClass class that determines the collection to use. Must not be {@literal null}. */ void insert(Collection batchToSave, Class entityClass); /** - * Insert a list of objects into the specified collection in a single batch write to the database. + * Insert a batch of objects into the specified collection in a single batch write to the database. * * @param batchToSave the list of objects to save. Must not be {@literal null}. * @param collectionName name of the collection to store the object in. Must not be {@literal null}. @@ -894,7 +902,7 @@ public interface MongoOperations extends FluentMongoOperations { * object is not already present, that is an 'upsert'. *

* The object is converted to the MongoDB native representation using an instance of {@see MongoConverter}. Unless - * configured otherwise, an instance of MappingMongoConverter will be used. + * configured otherwise, an instance of {@link MappingMongoConverter} will be used. *

* If you object has an "Id' property, it will be set with the generated Id from MongoDB. If your Id property is a * String then MongoDB ObjectId will be used to populate that string. Otherwise, the conversion from ObjectId to your @@ -911,11 +919,11 @@ public interface MongoOperations extends FluentMongoOperations { * is an 'upsert'. *

* The object is converted to the MongoDB native representation using an instance of {@see MongoConverter}. Unless - * configured otherwise, an instance of MappingMongoConverter will be used. + * configured otherwise, an instance of {@link MappingMongoConverter} will be used. *

* If you object has an "Id' property, it will be set with the generated Id from MongoDB. If your Id property is a * String then MongoDB ObjectId will be used to populate that string. Otherwise, the conversion from ObjectId to your - * property type will be handled by Spring's BeanWrapper class that leverages Type Cobnversion API. See Spring's * Type Conversion" for more details. * @@ -933,7 +941,7 @@ public interface MongoOperations extends FluentMongoOperations { * @param update the update document that contains the updated object or $ operators to manipulate the existing * object. Must not be {@literal null}. * @param entityClass class that determines the collection to use. Must not be {@literal null}. - * @return the WriteResult which lets you access the results of the previous write. + * @return the {@link UpdateResult} which lets you access the results of the previous write. */ UpdateResult upsert(Query query, Update update, Class entityClass); @@ -943,11 +951,12 @@ public interface MongoOperations extends FluentMongoOperations { * NOTE: Any additional support for field mapping, versions, etc. is not available due to the lack of * domain type information. Use {@link #upsert(Query, Update, Class, String)} to get full type specific support. * - * @param query the query document that specifies the criteria used to select a record to be updated + * @param query the query document that specifies the criteria used to select a record to be upserted. Must not be + * {@literal null}. * @param update the update document that contains the updated object or $ operators to manipulate the existing - * object. - * @param collectionName name of the collection to update the object in - * @return the WriteResult which lets you access the results of the previous write. + * object. Must not be {@literal null}. + * @param collectionName name of the collection to update the object in. + * @return the {@link UpdateResult} which lets you access the results of the previous write. */ UpdateResult upsert(Query query, Update update, String collectionName); @@ -961,7 +970,7 @@ public interface MongoOperations extends FluentMongoOperations { * object. Must not be {@literal null}. * @param entityClass class of the pojo to be operated on. Must not be {@literal null}. * @param collectionName name of the collection to update the object in. Must not be {@literal null}. - * @return the WriteResult which lets you access the results of the previous write. + * @return the {@link UpdateResult} which lets you access the results of the previous write. */ UpdateResult upsert(Query query, Update update, Class entityClass, String collectionName); @@ -969,11 +978,12 @@ public interface MongoOperations extends FluentMongoOperations { * Updates the first object that is found in the collection of the entity class that matches the query document with * the provided update document. * - * @param query the query document that specifies the criteria used to select a record to be updated - * @param update the update document that contains the updated object or $ operators to manipulate the existing - * object. - * @param entityClass class that determines the collection to use - * @return the WriteResult which lets you access the results of the previous write. + * @param query the query document that specifies the criteria used to select a record to be updated. Must not be + * {@literal null}. + * @param update the update document that contains the updated object or $ operators to manipulate the existing. Must + * not be {@literal null}. + * @param entityClass class that determines the collection to use. + * @return the {@link UpdateResult} which lets you access the results of the previous write. */ UpdateResult updateFirst(Query query, Update update, Class entityClass); @@ -985,24 +995,24 @@ public interface MongoOperations extends FluentMongoOperations { * * @param query the query document that specifies the criteria used to select a record to be updated. Must not be * {@literal null}. - * @param update the update document that contains the updated object or $ operators to manipulate the existing - * object. Must not be {@literal null}. + * @param update the update document that contains the updated object or $ operators to manipulate the existing. Must + * not be {@literal null}. * @param collectionName name of the collection to update the object in. Must not be {@literal null}. - * @return the WriteResult which lets you access the results of the previous write. + * @return the {@link UpdateResult} which lets you access the results of the previous write. */ UpdateResult updateFirst(Query query, Update update, String collectionName); /** * Updates the first object that is found in the specified collection that matches the query document criteria with - * the provided updated document. + * the provided updated document.
* * @param query the query document that specifies the criteria used to select a record to be updated. Must not be * {@literal null}. - * @param update the update document that contains the updated object or $ operators to manipulate the existing - * object. Must not be {@literal null}. + * @param update the update document that contains the updated object or $ operators to manipulate the existing. Must + * not be {@literal null}. * @param entityClass class of the pojo to be operated on. Must not be {@literal null}. * @param collectionName name of the collection to update the object in. Must not be {@literal null}. - * @return the WriteResult which lets you access the results of the previous write. + * @return the {@link UpdateResult} which lets you access the results of the previous write. */ UpdateResult updateFirst(Query query, Update update, Class entityClass, String collectionName); @@ -1012,10 +1022,10 @@ public interface MongoOperations extends FluentMongoOperations { * * @param query the query document that specifies the criteria used to select a record to be updated. Must not be * {@literal null}. - * @param update the update document that contains the updated object or $ operators to manipulate the existing - * object. Must not be {@literal null}. - * @param entityClass class that determines the collection to use. Must not be {@literal null}. - * @return the WriteResult which lets you access the results of the previous write. + * @param update the update document that contains the updated object or $ operators to manipulate the existing. Must + * not be {@literal null}. + * @param entityClass class of the pojo to be operated on. Must not be {@literal null}. + * @return the {@link UpdateResult} which lets you access the results of the previous write. */ UpdateResult updateMulti(Query query, Update update, Class entityClass); @@ -1027,10 +1037,10 @@ public interface MongoOperations extends FluentMongoOperations { * * @param query the query document that specifies the criteria used to select a record to be updated. Must not be * {@literal null}. - * @param update the update document that contains the updated object or $ operators to manipulate the existing - * object. Must not be {@literal null}. + * @param update the update document that contains the updated object or $ operators to manipulate the existing. Must + * not be {@literal null}. * @param collectionName name of the collection to update the object in. Must not be {@literal null}. - * @return the WriteResult which lets you access the results of the previous write. + * @return the {@link UpdateResult} which lets you access the results of the previous write. */ UpdateResult updateMulti(Query query, Update update, String collectionName); @@ -1040,38 +1050,38 @@ public interface MongoOperations extends FluentMongoOperations { * * @param query the query document that specifies the criteria used to select a record to be updated. Must not be * {@literal null}. - * @param update the update document that contains the updated object or $ operators to manipulate the existing - * object. Must not be {@literal null}. + * @param update the update document that contains the updated object or $ operators to manipulate the existing. Must + * not be {@literal null}. * @param entityClass class of the pojo to be operated on. Must not be {@literal null}. * @param collectionName name of the collection to update the object in. Must not be {@literal null}. - * @return the WriteResult which lets you access the results of the previous write. + * @return the {@link UpdateResult} which lets you access the results of the previous write. */ - UpdateResult updateMulti(final Query query, final Update update, Class entityClass, String collectionName); + UpdateResult updateMulti(Query query, Update update, Class entityClass, String collectionName); /** * Remove the given object from the collection by id. * * @param object must not be {@literal null}. - * @return never {@literal null}. - * @throws IllegalArgumentException when {@code object} to remove is {@literal null}. + * @return the {@link DeleteResult} which lets you access the results of the previous delete. */ DeleteResult remove(Object object); /** * Removes the given object from the given collection. * - * @param object - * @param collection must not be {@literal null} or empty. - * @thorws IllegalArgumentException when {@code object} or {@code collection} is {@literal null}. + * @param object must not be {@literal null}. + * @param collectionName name of the collection where the objects will removed, must not be {@literal null} or empty. + * @return the {@link DeleteResult} which lets you access the results of the previous delete. */ - DeleteResult remove(Object object, String collection); + DeleteResult remove(Object object, String collectionName); /** * Remove all documents that match the provided query document criteria from the the collection used to store the * entityClass. The Class parameter is also used to help convert the Id of the object if it is present in the query. * - * @param query - * @param entityClass + * @param query the query document that specifies the criteria used to remove a record. + * @param entityClass class that determines the collection to use. + * @return the {@link DeleteResult} which lets you access the results of the previous delete. */ DeleteResult remove(Query query, Class entityClass); @@ -1079,9 +1089,10 @@ public interface MongoOperations extends FluentMongoOperations { * Remove all documents that match the provided query document criteria from the the collection used to store the * entityClass. The Class parameter is also used to help convert the Id of the object if it is present in the query. * - * @param query - * @param entityClass - * @param collectionName + * @param query the query document that specifies the criteria used to remove a record. + * @param entityClass class of the pojo to be operated on. Can be {@literal null}. + * @param collectionName name of the collection where the objects will removed, must not be {@literal null} or empty. + * @return the {@link DeleteResult} which lets you access the results of the previous delete. */ DeleteResult remove(Query query, Class entityClass, String collectionName); @@ -1091,8 +1102,9 @@ public interface MongoOperations extends FluentMongoOperations { * NOTE: Any additional support for field mapping is not available due to the lack of domain type * information. Use {@link #remove(Query, Class, String)} to get full type specific support. * - * @param query the query document that specifies the criteria used to remove a record - * @param collectionName name of the collection where the objects will removed + * @param query the query document that specifies the criteria used to remove a record. + * @param collectionName name of the collection where the objects will removed, must not be {@literal null} or empty. + * @return the {@link DeleteResult} which lets you access the results of the previous delete. */ DeleteResult remove(Query query, String collectionName); @@ -1101,9 +1113,9 @@ public interface MongoOperations extends FluentMongoOperations { * NOTE: Any additional support for field mapping is not available due to the lack of domain type * information. Use {@link #findAllAndRemove(Query, Class, String)} to get full type specific support. * - * @param query must not be {@literal null}. - * @param collectionName must not be {@literal null}. - * @return + * @param query the query document that specifies the criteria used to find and remove documents. + * @param collectionName name of the collection where the objects will removed, must not be {@literal null} or empty. + * @return the {@link List} converted objects deleted by this operation. * @since 1.5 */ List findAllAndRemove(Query query, String collectionName); @@ -1111,9 +1123,9 @@ public interface MongoOperations extends FluentMongoOperations { /** * Returns and removes all documents matching the given query form the collection used to store the entityClass. * - * @param query - * @param entityClass - * @return + * @param query the query document that specifies the criteria used to find and remove documents. + * @param entityClass class of the pojo to be operated on. + * @return the {@link List} converted objects deleted by this operation. * @since 1.5 */ List findAllAndRemove(Query query, Class entityClass); @@ -1123,10 +1135,10 @@ public interface MongoOperations extends FluentMongoOperations { * store the entityClass. The Class parameter is also used to help convert the Id of the object if it is present in * the query. * - * @param query - * @param entityClass - * @param collectionName - * @return + * @param query the query document that specifies the criteria used to find and remove documents. + * @param entityClass class of the pojo to be operated on. + * @param collectionName name of the collection where the objects will removed, must not be {@literal null} or empty. + * @return the {@link List} converted objects deleted by this operation. * @since 1.5 */ List findAllAndRemove(Query query, Class entityClass, String collectionName); diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java index deb5f7edb..225f623e6 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java @@ -1475,12 +1475,12 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware, } @Override - public DeleteResult remove(Object object, String collection) { + public DeleteResult remove(Object object, String collectionName) { Assert.notNull(object, "Object must not be null!"); - Assert.hasText(collection, "Collection name must not be null or empty!"); + Assert.hasText(collectionName, "Collection name must not be null or empty!"); - return doRemove(collection, getIdQueryFor(object), object.getClass()); + return doRemove(collectionName, getIdQueryFor(object), object.getClass()); } /** diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoOperations.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoOperations.java index 679ff5a1d..2d825a944 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoOperations.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoOperations.java @@ -15,7 +15,6 @@ */ package org.springframework.data.mongodb.core; -import org.springframework.lang.Nullable; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -36,6 +35,7 @@ import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.NearQuery; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; +import org.springframework.lang.Nullable; import com.mongodb.ReadPreference; import com.mongodb.client.result.DeleteResult; @@ -61,6 +61,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { /** * Returns the reactive operations that can be performed on indexes * + * @param collectionName must not be {@literal null}. * @return index operations on the named collection */ ReactiveIndexOperations indexOps(String collectionName); @@ -68,13 +69,14 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { /** * Returns the reactive operations that can be performed on indexes * + * @param entityClass must not be {@literal null}. * @return index operations on the named collection associated with the given entity class */ ReactiveIndexOperations indexOps(Class entityClass); /** * Execute the a MongoDB command expressed as a JSON string. This will call the method JSON.parse that is part of the - * MongoDB driver to convert the JSON string to a DBObject. Any errors that result from executing this command will be + * MongoDB driver to convert the JSON string to a Document. Any errors that result from executing this command will be * converted into Spring's DAO exception hierarchy. * * @param jsonCommand a MongoDB command expressed as a JSON string. @@ -86,7 +88,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * Execute a MongoDB command. Any errors that result from executing this command will be converted into Spring's DAO * exception hierarchy. * - * @param command a MongoDB command + * @param command a MongoDB command. * @return a result object returned by the action */ Mono executeCommand(Document command); @@ -97,7 +99,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * * @param command a MongoDB command, must not be {@literal null}. * @param readPreference read preferences to use, can be {@literal null}. - * @return a result object returned by the action + * @return a result object returned by the action. */ Mono executeCommand(Document command, @Nullable ReadPreference readPreference); @@ -106,8 +108,9 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { *

* Allows for returning a result object, that is a domain object or a collection of domain objects. * - * @param return type - * @param action callback object that specifies the MongoDB actions to perform on the passed in DB instance. + * @param action callback object that specifies the MongoDB actions to perform on the passed in DB instance. Must not + * be {@literal null}. + * @param return type. * @return a result object returned by the action */ Flux execute(ReactiveDatabaseCallback action); @@ -117,10 +120,10 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { *

* Allows for returning a result object, that is a domain object or a collection of domain objects. * - * @param entityClass class that determines the collection to use - * @param return type - * @param action callback object that specifies the MongoDB action - * @return a result object returned by the action or null + * @param entityClass class that determines the collection to use. Must not be {@literal null}. + * @param action callback object that specifies the MongoDB action. Must not be {@literal null}. + * @param return type. + * @return a result object returned by the action or {@literal null}. */ Flux execute(Class entityClass, ReactiveCollectionCallback action); @@ -129,51 +132,53 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { *

* Allows for returning a result object, that is a domain object or a collection of domain objects. * - * @param return type - * @param collectionName the name of the collection that specifies which DBCollection instance will be passed into - * @param action callback object that specifies the MongoDB action the callback action. - * @return a result object returned by the action or null + * @param collectionName the name of the collection that specifies which {@link MongoCollection} instance will be + * passed into. Must not be {@literal null} or empty. + * @param action callback object that specifies the MongoDB action the callback action. Must not be {@literal null}. + * @param return type. + * @return a result object returned by the action or {@literal null}. */ Flux execute(String collectionName, ReactiveCollectionCallback action); /** * Create an uncapped collection with a name based on the provided entity class. * - * @param entityClass class that determines the collection to create - * @return the created collection + * @param entityClass class that determines the collection to create. + * @return the created collection. */ Mono> createCollection(Class entityClass); /** * Create a collection with a name based on the provided entity class using the options. * - * @param entityClass class that determines the collection to create + * @param entityClass class that determines the collection to create. Must not be {@literal null}. * @param collectionOptions options to use when creating the collection. - * @return the created collection + * @return the created collection. */ - Mono> createCollection(Class entityClass, CollectionOptions collectionOptions); + Mono> createCollection(Class entityClass, + @Nullable CollectionOptions collectionOptions); /** * Create an uncapped collection with the provided name. * - * @param collectionName name of the collection - * @return the created collection + * @param collectionName name of the collection. + * @return the created collection. */ Mono> createCollection(String collectionName); /** * Create a collection with the provided name and options. * - * @param collectionName name of the collection + * @param collectionName name of the collection. Must not be {@literal null} nor empty. * @param collectionOptions options to use when creating the collection. - * @return the created collection + * @return the created collection. */ Mono> createCollection(String collectionName, CollectionOptions collectionOptions); /** * A set of collection names. * - * @return Flux of collection names + * @return Flux of collection names. */ Flux getCollectionNames(); @@ -182,7 +187,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { *

* Translate any exceptions as necessary. * - * @param collectionName name of the collection + * @param collectionName name of the collection. * @return an existing collection or a newly created one. */ MongoCollection getCollection(String collectionName); @@ -192,7 +197,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { *

* Translate any exceptions as necessary. * - * @param entityClass class that determines the name of the collection + * @param entityClass class that determines the name of the collection. Must not be {@literal null}. * @return true if a collection with the given name is found, false otherwise. */ Mono collectionExists(Class entityClass); @@ -202,7 +207,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { *

* Translate any exceptions as necessary. * - * @param collectionName name of the collection + * @param collectionName name of the collection. Must not be {@literal null}. * @return true if a collection with the given name is found, false otherwise. */ Mono collectionExists(String collectionName); @@ -212,7 +217,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { *

* Translate any exceptions as necessary. * - * @param entityClass class that determines the collection to drop/delete. + * @param entityClass class that determines the collection to drop/delete. Must not be {@literal null}. */ Mono dropCollection(Class entityClass); @@ -235,7 +240,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * to map objects since the test for class type is done in the client and not on the server. * * @param entityClass the parametrized type of the returned {@link Flux}. - * @return the converted collection + * @return the converted collection. */ Flux findAll(Class entityClass); @@ -249,8 +254,8 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * to map objects since the test for class type is done in the client and not on the server. * * @param entityClass the parametrized type of the returned {@link Flux}. - * @param collectionName name of the collection to retrieve the objects from - * @return the converted collection + * @param collectionName name of the collection to retrieve the objects from. + * @return the converted collection. */ Flux findAll(Class entityClass, String collectionName); @@ -265,9 +270,9 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * feature rich {@link Query}. * * @param query the query class that specifies the criteria used to find a record and also an optional fields - * specification + * specification. * @param entityClass the parametrized type of the returned {@link Mono}. - * @return the converted object + * @return the converted object. */ Mono findOne(Query query, Class entityClass); @@ -282,10 +287,10 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * feature rich {@link Query}. * * @param query the query class that specifies the criteria used to find a record and also an optional fields - * specification + * specification. * @param entityClass the parametrized type of the returned {@link Mono}. - * @param collectionName name of the collection to retrieve the objects from - * @return the converted object + * @param collectionName name of the collection to retrieve the objects from. + * @return the converted object. */ Mono findOne(Query query, Class entityClass, String collectionName); @@ -296,7 +301,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * * @param query the {@link Query} class that specifies the criteria used to find a record. * @param collectionName name of the collection to check for objects. - * @return + * @return {@literal true} if the query yields a result. */ Mono exists(Query query, String collectionName); @@ -305,7 +310,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * * @param query the {@link Query} class that specifies the criteria used to find a record. * @param entityClass the parametrized type. - * @return + * @return {@literal true} if the query yields a result. */ Mono exists(Query query, Class entityClass); @@ -315,7 +320,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * @param query the {@link Query} class that specifies the criteria used to find a record. * @param entityClass the parametrized type. Can be {@literal null}. * @param collectionName name of the collection to check for objects. - * @return + * @return {@literal true} if the query yields a result. */ Mono exists(Query query, @Nullable Class entityClass, String collectionName); @@ -329,9 +334,9 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * feature rich {@link Query}. * * @param query the query class that specifies the criteria used to find a record and also an optional fields - * specification - * @param entityClass the parametrized type of the returned {@link Flux}. - * @return the {@link Flux} of converted objects + * specification. Must not be {@literal null}. + * @param entityClass the parametrized type of the returned {@link Flux}. Must not be {@literal null}. + * @return the {@link Flux} of converted objects. */ Flux find(Query query, Class entityClass); @@ -345,10 +350,10 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * feature rich {@link Query}. * * @param query the query class that specifies the criteria used to find a record and also an optional fields - * specification + * specification. Must not be {@literal null}. * @param entityClass the parametrized type of the returned {@link Flux}. - * @param collectionName name of the collection to retrieve the objects from - * @return the {@link Flux} of converted objects + * @param collectionName name of the collection to retrieve the objects from. Must not be {@literal null}. + * @return the {@link Flux} of converted objects. */ Flux find(Query query, Class entityClass, String collectionName); @@ -356,9 +361,8 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * Returns a document with the given id mapped onto the given class. The collection the query is ran against will be * derived from the given target class as well. * - * @param - * @param id the id of the document to return. - * @param entityClass the type the document shall be converted into. + * @param id the id of the document to return. Must not be {@literal null}. + * @param entityClass the type the document shall be converted into. Must not be {@literal null}. * @return the document with the given id mapped onto the given target class. */ Mono findById(Object id, Class entityClass); @@ -366,11 +370,10 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { /** * Returns the document with the given id from the given collection mapped onto the given target class. * - * @param id the id of the document to return - * @param entityClass the type to convert the document to - * @param collectionName the collection to query for the document - * @param - * @return + * @param id the id of the document to return. + * @param entityClass the type to convert the document to. + * @param collectionName the collection to query for the document. + * @return the converted object. */ Mono findById(Object id, Class entityClass, String collectionName); @@ -459,7 +462,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * * @param near must not be {@literal null}. * @param entityClass must not be {@literal null}. - * @return + * @return the converted {@link GeoResult}s. */ Flux> geoNear(NearQuery near, Class entityClass); @@ -472,37 +475,37 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * @param entityClass must not be {@literal null}. * @param collectionName the collection to trigger the query against. If no collection name is given the entity class * will be inspected. - * @return + * @return the converted {@link GeoResult}s. */ Flux> geoNear(NearQuery near, Class entityClass, String collectionName); /** - * Triggers findAndModify + * Triggers findAndModify * to apply provided {@link Update} on documents matching {@link Criteria} of given {@link Query}. * * @param query the {@link Query} class that specifies the {@link Criteria} used to find a record and also an optional - * fields specification. - * @param update the {@link Update} to apply on matching documents. - * @param entityClass the parametrized type. - * @return + * fields specification. Must not be {@literal null}. + * @param update the {@link Update} to apply on matching documents. Must not be {@literal null}. + * @param entityClass the parametrized type. Must not be {@literal null}. + * @return the converted object that was updated before it was updated. */ Mono findAndModify(Query query, Update update, Class entityClass); /** - * Triggers findAndModify + * Triggers findAndModify * to apply provided {@link Update} on documents matching {@link Criteria} of given {@link Query}. * * @param query the {@link Query} class that specifies the {@link Criteria} used to find a record and also an optional - * fields specification. - * @param update the {@link Update} to apply on matching documents. - * @param entityClass the parametrized type. - * @param collectionName the collection to query. - * @return + * fields specification. Must not be {@literal null}. + * @param update the {@link Update} to apply on matching documents. Must not be {@literal null}. + * @param entityClass the parametrized type. Must not be {@literal null}. + * @param collectionName the collection to query. Must not be {@literal null}. + * @return the converted object that was updated before it was updated. */ Mono findAndModify(Query query, Update update, Class entityClass, String collectionName); /** - * Triggers findAndModify + * Triggers findAndModify * to apply provided {@link Update} on documents matching {@link Criteria} of given {@link Query} taking * {@link FindAndModifyOptions} into account. * @@ -511,22 +514,24 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * @param update the {@link Update} to apply on matching documents. * @param options the {@link FindAndModifyOptions} holding additional information. * @param entityClass the parametrized type. - * @return + * @return the converted object that was updated. Depending on the value of {@link FindAndModifyOptions#isReturnNew()} + * this will either be the object as it was before the update or as it is after the update. */ Mono findAndModify(Query query, Update update, FindAndModifyOptions options, Class entityClass); /** - * Triggers findAndModify + * Triggers findAndModify * to apply provided {@link Update} on documents matching {@link Criteria} of given {@link Query} taking * {@link FindAndModifyOptions} into account. * * @param query the {@link Query} class that specifies the {@link Criteria} used to find a record and also an optional - * fields specification. - * @param update the {@link Update} to apply on matching documents. - * @param options the {@link FindAndModifyOptions} holding additional information. - * @param entityClass the parametrized type. - * @param collectionName the collection to query. - * @return + * fields specification. Must not be {@literal null}. + * @param update the {@link Update} to apply on matching documents. Must not be {@literal null}. + * @param options the {@link FindAndModifyOptions} holding additional information. Must not be {@literal null}. + * @param entityClass the parametrized type. Must not be {@literal null}. + * @param collectionName the collection to query. Must not be {@literal null}. + * @return the converted object that was updated. Depending on the value of {@link FindAndModifyOptions#isReturnNew()} + * this will either be the object as it was before the update or as it is after the update. */ Mono findAndModify(Query query, Update update, FindAndModifyOptions options, Class entityClass, String collectionName); @@ -542,7 +547,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * feature rich {@link Query}. * * @param query the query class that specifies the criteria used to find a record and also an optional fields - * specification + * specification. * @param entityClass the parametrized type of the returned {@link Mono}. * @return the converted object */ @@ -559,19 +564,20 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * feature rich {@link Query}. * * @param query the query class that specifies the criteria used to find a record and also an optional fields - * specification + * specification. * @param entityClass the parametrized type of the returned {@link Mono}. * @param collectionName name of the collection to retrieve the objects from. - * @return the converted object + * @return the converted object. */ Mono findAndRemove(Query query, Class entityClass, String collectionName); /** * Returns the number of documents for the given {@link Query} by querying the collection of the given entity class. * - * @param query - * @param entityClass must not be {@literal null}. - * @return + * @param query the {@link Query} class that specifies the criteria used to find documents. Must not be + * {@literal null}. + * @param entityClass class that determines the collection to use. Must not be {@literal null}. + * @return the count of matching documents. */ Mono count(Query query, Class entityClass); @@ -580,9 +586,9 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * must solely consist of document field references as we lack type information to map potential property references * onto document fields. Use {@link #count(Query, Class, String)} to get full type specific support. * - * @param query + * @param query the {@link Query} class that specifies the criteria used to find documents. * @param collectionName must not be {@literal null} or empty. - * @return + * @return the count of matching documents. * @see #count(Query, Class, String) */ Mono count(Query query, String collectionName); @@ -591,12 +597,13 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * Returns the number of documents for the given {@link Query} by querying the given collection using the given entity * class to map the given {@link Query}. * - * @param query - * @param entityClass must not be {@literal null}. + * @param query the {@link Query} class that specifies the criteria used to find documents. Must not be + * {@literal null}. + * @param entityClass the parametrized type. Can be {@literal null}. * @param collectionName must not be {@literal null} or empty. - * @return + * @return the count of matching documents. */ - Mono count(Query query, Class entityClass, String collectionName); + Mono count(Query query, @Nullable Class entityClass, String collectionName); /** * Insert the object into the collection for the entity type of the object to save. @@ -612,8 +619,8 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { *

* Insert is used to initially store the object into the database. To update an existing object use the save method. * - * @param objectToSave the object to store in the collection. - * @return + * @param objectToSave the object to store in the collection. Must not be {@literal null}. + * @return the saved object. */ Mono insert(T objectToSave); @@ -625,27 +632,27 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { *

* Insert is used to initially store the object into the database. To update an existing object use the save method. * - * @param objectToSave the object to store in the collection - * @param collectionName name of the collection to store the object in - * @return + * @param objectToSave the object to store in the collection. Must not be {@literal null}. + * @param collectionName name of the collection to store the object in. Must not be {@literal null}. + * @return the saved object. */ Mono insert(T objectToSave, String collectionName); /** * Insert a Collection of objects into a collection in a single batch write to the database. * - * @param batchToSave the batch of objects to save. - * @param entityClass class that determines the collection to use - * @return + * @param batchToSave the batch of objects to save. Must not be {@literal null}. + * @param entityClass class that determines the collection to use. Must not be {@literal null}. + * @return the saved objects. */ Flux insert(Collection batchToSave, Class entityClass); /** * Insert a batch of objects into the specified collection in a single batch write to the database. * - * @param batchToSave the list of objects to save. - * @param collectionName name of the collection to store the object in - * @return + * @param batchToSave the list of objects to save. Must not be {@literal null}. + * @param collectionName name of the collection to store the object in. Must not be {@literal null}. + * @return the saved objects. */ Flux insert(Collection batchToSave, String collectionName); @@ -653,8 +660,8 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * Insert a mixed Collection of objects into a database collection determining the collection name to use based on the * class. * - * @param objectsToSave the list of objects to save. - * @return + * @param objectsToSave the list of objects to save. Must not be {@literal null}. + * @return the saved objects. */ Flux insertAll(Collection objectsToSave); @@ -672,26 +679,26 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { *

* Insert is used to initially store the object into the database. To update an existing object use the save method. * - * @param objectToSave the object to store in the collection. - * @return + * @param objectToSave the object to store in the collection. Must not be {@literal null}. + * @return the saved object. */ Mono insert(Mono objectToSave); /** * Insert a Collection of objects into a collection in a single batch write to the database. * - * @param batchToSave the publisher which provides objects to save. - * @param entityClass class that determines the collection to use - * @return + * @param batchToSave the publisher which provides objects to save. Must not be {@literal null}. + * @param entityClass class that determines the collection to use. Must not be {@literal null}. + * @return the saved objects. */ Flux insertAll(Mono> batchToSave, Class entityClass); /** * Insert objects into the specified collection in a single batch write to the database. * - * @param batchToSave the publisher which provides objects to save. - * @param collectionName name of the collection to store the object in - * @return + * @param batchToSave the publisher which provides objects to save. Must not be {@literal null}. + * @param collectionName name of the collection to store the object in. Must not be {@literal null}. + * @return the saved objects. */ Flux insertAll(Mono> batchToSave, String collectionName); @@ -699,8 +706,8 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * Insert a mixed Collection of objects into a database collection determining the collection name to use based on the * class. * - * @param objectsToSave the publisher which provides objects to save. - * @return + * @param objectsToSave the publisher which provides objects to save. Must not be {@literal null}. + * @return the saved objects. */ Flux insertAll(Mono> objectsToSave); @@ -717,8 +724,8 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * * Spring's Type Conversion" for more details. * - * @param objectToSave the object to store in the collection - * @return + * @param objectToSave the object to store in the collection. Must not be {@literal null}. + * @return the saved object. */ Mono save(T objectToSave); @@ -735,9 +742,9 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html#core-convert">Spring's * Type Conversion" for more details. * - * @param objectToSave the object to store in the collection - * @param collectionName name of the collection to store the object in - * @return + * @param objectToSave the object to store in the collection. Must not be {@literal null}. + * @param collectionName name of the collection to store the object in. Must not be {@literal null}. + * @return the saved object. */ Mono save(T objectToSave, String collectionName); @@ -754,8 +761,8 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * * Spring's Type Conversion" for more details. * - * @param objectToSave the object to store in the collection - * @return + * @param objectToSave the object to store in the collection. Must not be {@literal null}. + * @return the saved object. */ Mono save(Mono objectToSave); @@ -772,9 +779,9 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html#core-convert">Spring's * Type Conversion" for more details. * - * @param objectToSave the object to store in the collection - * @param collectionName name of the collection to store the object in - * @return + * @param objectToSave the object to store in the collection. Must not be {@literal null}. + * @param collectionName name of the collection to store the object in. Must not be {@literal null}. + * @return the saved object. */ Mono save(Mono objectToSave, String collectionName); @@ -782,10 +789,12 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * Performs an upsert. If no document is found that matches the query, a new document is created and inserted by * combining the query document and the update document. * - * @param query the query document that specifies the criteria used to select a record to be upserted - * @param update the update document that contains the updated object or $ operators to manipulate the existing object - * @param entityClass class that determines the collection to use - * @return the WriteResult which lets you access the results of the previous write. + * @param query the query document that specifies the criteria used to select a record to be upserted. Must not be + * {@literal null}. + * @param update the update document that contains the updated object or $ operators to manipulate the existing + * object. Must not be {@literal null}. + * @param entityClass class that determines the collection to use. Must not be {@literal null}. + * @return the {@link UpdateResult} which lets you access the results of the previous write. */ Mono upsert(Query query, Update update, Class entityClass); @@ -795,11 +804,12 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * NOTE: Any additional support for field mapping, versions, etc. is not available due to the lack of * domain type information. Use {@link #upsert(Query, Update, Class, String)} to get full type specific support. * - * @param query the query document that specifies the criteria used to select a record to be updated + * @param query the query document that specifies the criteria used to select a record to be upserted. Must not be + * {@literal null}. * @param update the update document that contains the updated object or $ operators to manipulate the existing - * object. - * @param collectionName name of the collection to update the object in - * @return the WriteResult which lets you access the results of the previous write. + * object. Must not be {@literal null}. + * @param collectionName name of the collection to update the object in. + * @return the {@link UpdateResult} which lets you access the results of the previous write. */ Mono upsert(Query query, Update update, String collectionName); @@ -807,11 +817,13 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * Performs an upsert. If no document is found that matches the query, a new document is created and inserted by * combining the query document and the update document. * - * @param query the query document that specifies the criteria used to select a record to be upserted - * @param update the update document that contains the updated object or $ operators to manipulate the existing object - * @param entityClass class of the pojo to be operated on - * @param collectionName name of the collection to update the object in - * @return the WriteResult which lets you access the results of the previous write. + * @param query the query document that specifies the criteria used to select a record to be upserted. Must not be + * {@literal null}. + * @param update the update document that contains the updated object or $ operators to manipulate the existing + * object. Must not be {@literal null}. + * @param entityClass class of the pojo to be operated on. Must not be {@literal null}. + * @param collectionName name of the collection to update the object in. Must not be {@literal null}. + * @return the {@link UpdateResult} which lets you access the results of the previous write. */ Mono upsert(Query query, Update update, Class entityClass, String collectionName); @@ -819,11 +831,12 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * Updates the first object that is found in the collection of the entity class that matches the query document with * the provided update document. * - * @param query the query document that specifies the criteria used to select a record to be updated - * @param update the update document that contains the updated object or $ operators to manipulate the existing - * object. - * @param entityClass class that determines the collection to use - * @return the WriteResult which lets you access the results of the previous write. + * @param query the query document that specifies the criteria used to select a record to be updated. Must not be + * {@literal null}. + * @param update the update document that contains the updated object or $ operators to manipulate the existing. Must + * not be {@literal null}. + * @param entityClass class that determines the collection to use. + * @return the {@link UpdateResult} which lets you access the results of the previous write. */ Mono updateFirst(Query query, Update update, Class entityClass); @@ -833,26 +846,26 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * NOTE: Any additional support for field mapping, versions, etc. is not available due to the lack of * domain type information. Use {@link #updateFirst(Query, Update, Class, String)} to get full type specific support. * - * @param query the query document that specifies the criteria used to select a record to be updated - * @param update the update document that contains the updated object or $ operators to manipulate the existing - * object. - * @param collectionName name of the collection to update the object in - * @return the WriteResult which lets you access the results of the previous write. + * @param query the query document that specifies the criteria used to select a record to be updated. Must not be + * {@literal null}. + * @param update the update document that contains the updated object or $ operators to manipulate the existing. Must + * not be {@literal null}. + * @param collectionName name of the collection to update the object in. Must not be {@literal null}. + * @return the {@link UpdateResult} which lets you access the results of the previous write. */ Mono updateFirst(Query query, Update update, String collectionName); /** * Updates the first object that is found in the specified collection that matches the query document criteria with * the provided updated document.
- * NOTE: Any additional support for field mapping, versions, etc. is not available due to the lack of - * domain type information. Use {@link #updateFirst(Query, Update, Class, String)} to get full type specific support. * - * @param query the query document that specifies the criteria used to select a record to be updated - * @param update the update document that contains the updated object or $ operators to manipulate the existing - * object. - * @param entityClass class of the pojo to be operated on - * @param collectionName name of the collection to update the object in - * @return the WriteResult which lets you access the results of the previous write. + * @param query the query document that specifies the criteria used to select a record to be updated. Must not be + * {@literal null}. + * @param update the update document that contains the updated object or $ operators to manipulate the existing. Must + * not be {@literal null}. + * @param entityClass class of the pojo to be operated on. Must not be {@literal null}. + * @param collectionName name of the collection to update the object in. Must not be {@literal null}. + * @return the {@link UpdateResult} which lets you access the results of the previous write. */ Mono updateFirst(Query query, Update update, Class entityClass, String collectionName); @@ -860,11 +873,12 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * Updates all objects that are found in the collection for the entity class that matches the query document criteria * with the provided updated document. * - * @param query the query document that specifies the criteria used to select a record to be updated - * @param update the update document that contains the updated object or $ operators to manipulate the existing - * object. - * @param entityClass class that determines the collection to use - * @return the WriteResult which lets you access the results of the previous write. + * @param query the query document that specifies the criteria used to select a record to be updated. Must not be + * {@literal null}. + * @param update the update document that contains the updated object or $ operators to manipulate the existing. Must + * not be {@literal null}. + * @param entityClass class of the pojo to be operated on. Must not be {@literal null}. + * @return the {@link UpdateResult} which lets you access the results of the previous write. */ Mono updateMulti(Query query, Update update, Class entityClass); @@ -874,11 +888,12 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * NOTE: Any additional support for field mapping, versions, etc. is not available due to the lack of * domain type information. Use {@link #updateMulti(Query, Update, Class, String)} to get full type specific support. * - * @param query the query document that specifies the criteria used to select a record to be updated - * @param update the update document that contains the updated object or $ operators to manipulate the existing - * object. - * @param collectionName name of the collection to update the object in - * @return the WriteResult which lets you access the results of the previous write. + * @param query the query document that specifies the criteria used to select a record to be updated. Must not be + * {@literal null}. + * @param update the update document that contains the updated object or $ operators to manipulate the existing. Must + * not be {@literal null}. + * @param collectionName name of the collection to update the object in. Must not be {@literal null}. + * @return the {@link UpdateResult} which lets you access the results of the previous write. */ Mono updateMulti(Query query, Update update, String collectionName); @@ -886,20 +901,21 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * Updates all objects that are found in the collection for the entity class that matches the query document criteria * with the provided updated document. * - * @param query the query document that specifies the criteria used to select a record to be updated - * @param update the update document that contains the updated object or $ operators to manipulate the existing - * object. - * @param entityClass class of the pojo to be operated on - * @param collectionName name of the collection to update the object in - * @return the WriteResult which lets you access the results of the previous write. + * @param query the query document that specifies the criteria used to select a record to be updated. Must not be + * {@literal null}. + * @param update the update document that contains the updated object or $ operators to manipulate the existing. Must + * not be {@literal null}. + * @param entityClass class of the pojo to be operated on. Must not be {@literal null}. + * @param collectionName name of the collection to update the object in. Must not be {@literal null}. + * @return the {@link UpdateResult} which lets you access the results of the previous write. */ - Mono updateMulti(final Query query, final Update update, Class entityClass, String collectionName); + Mono updateMulti(Query query, Update update, Class entityClass, String collectionName); /** * Remove the given object from the collection by id. * * @param object must not be {@literal null}. - * @return + * @return the {@link DeleteResult} which lets you access the results of the previous delete. */ Mono remove(Object object); @@ -907,34 +923,35 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * Removes the given object from the given collection. * * @param object must not be {@literal null}. - * @param collection must not be {@literal null} or empty. + * @param collectionName name of the collection where the objects will removed, must not be {@literal null} or empty. + * @return the {@link DeleteResult} which lets you access the results of the previous delete. */ - Mono remove(Object object, String collection); + Mono remove(Object object, String collectionName); /** * Remove the given object from the collection by id. * - * @param objectToRemove - * @return + * @param objectToRemove must not be {@literal null}. + * @return the {@link DeleteResult} which lets you access the results of the previous delete. */ Mono remove(Mono objectToRemove); /** * Removes the given object from the given collection. * - * @param objectToRemove - * @param collection must not be {@literal null} or empty. - * @return + * @param objectToRemove must not be {@literal null}. + * @param collectionName name of the collection where the objects will removed, must not be {@literal null} or empty. + * @return the {@link DeleteResult} which lets you access the results of the previous delete. */ - Mono remove(Mono objectToRemove, String collection); + Mono remove(Mono objectToRemove, String collectionName); /** * Remove all documents that match the provided query document criteria from the the collection used to store the * entityClass. The Class parameter is also used to help convert the Id of the object if it is present in the query. * - * @param query - * @param entityClass - * @return + * @param query the query document that specifies the criteria used to remove a record. + * @param entityClass class that determines the collection to use. + * @return the {@link DeleteResult} which lets you access the results of the previous delete. */ Mono remove(Query query, Class entityClass); @@ -942,12 +959,12 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * Remove all documents that match the provided query document criteria from the the collection used to store the * entityClass. The Class parameter is also used to help convert the Id of the object if it is present in the query. * - * @param query - * @param entityClass - * @param collectionName - * @return + * @param query the query document that specifies the criteria used to remove a record. + * @param entityClass class of the pojo to be operated on. Can be {@literal null}. + * @param collectionName name of the collection where the objects will removed, must not be {@literal null} or empty. + * @return the {@link DeleteResult} which lets you access the results of the previous delete. */ - Mono remove(Query query, Class entityClass, String collectionName); + Mono remove(Query query, @Nullable Class entityClass, String collectionName); /** * Remove all documents from the specified collection that match the provided query document criteria. There is no @@ -955,8 +972,9 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * NOTE: Any additional support for field mapping is not available due to the lack of domain type * information. Use {@link #remove(Query, Class, String)} to get full type specific support. * - * @param query the query document that specifies the criteria used to remove a record - * @param collectionName name of the collection where the objects will removed + * @param query the query document that specifies the criteria used to remove a record. + * @param collectionName name of the collection where the objects will removed, must not be {@literal null} or empty. + * @return the {@link DeleteResult} which lets you access the results of the previous delete. */ Mono remove(Query query, String collectionName); @@ -965,18 +983,18 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * NOTE: Any additional support for field mapping is not available due to the lack of domain type * information. Use {@link #findAllAndRemove(Query, Class, String)} to get full type specific support. * - * @param query - * @param collectionName - * @return + * @param query the query document that specifies the criteria used to find and remove documents. + * @param collectionName name of the collection where the objects will removed, must not be {@literal null} or empty. + * @return the {@link Flux} converted objects deleted by this operation. */ Flux findAllAndRemove(Query query, String collectionName); /** * Returns and removes all documents matching the given query form the collection used to store the entityClass. * - * @param query - * @param entityClass - * @return + * @param query the query document that specifies the criteria used to find and remove documents. + * @param entityClass class of the pojo to be operated on. + * @return the {@link Flux} converted objects deleted by this operation. */ Flux findAllAndRemove(Query query, Class entityClass); @@ -985,10 +1003,10 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * store the entityClass. The Class parameter is also used to help convert the Id of the object if it is present in * the query. * - * @param query - * @param entityClass - * @param collectionName - * @return + * @param query the query document that specifies the criteria used to find and remove documents. + * @param entityClass class of the pojo to be operated on. + * @param collectionName name of the collection where the objects will removed, must not be {@literal null} or empty. + * @return the {@link Flux} converted objects deleted by this operation. */ Flux findAllAndRemove(Query query, Class entityClass, String collectionName); @@ -1005,9 +1023,9 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * feature rich {@link Query}. * * @param query the query class that specifies the criteria used to find a record and also an optional fields - * specification + * specification. * @param entityClass the parametrized type of the returned {@link Flux}. - * @return the {@link Flux} of converted objects + * @return the {@link Flux} of converted objects. */ Flux tail(Query query, Class entityClass); @@ -1024,10 +1042,10 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations { * feature rich {@link Query}. * * @param query the query class that specifies the criteria used to find a record and also an optional fields - * specification + * specification. * @param entityClass the parametrized type of the returned {@link Flux}. - * @param collectionName name of the collection to retrieve the objects from - * @return the {@link Flux} of converted objects + * @param collectionName name of the collection to retrieve the objects from. + * @return the {@link Flux} of converted objects. */ Flux tail(Query query, Class entityClass, String collectionName); diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java index d3627777e..6b9e97bb6 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java @@ -489,7 +489,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati * @see org.springframework.data.mongodb.core.ReactiveMongoOperations#createCollection(java.lang.Class, org.springframework.data.mongodb.core.CollectionOptions) */ public Mono> createCollection(Class entityClass, - CollectionOptions collectionOptions) { + @Nullable CollectionOptions collectionOptions) { return createCollection(determineCollectionName(entityClass), collectionOptions); } @@ -928,12 +928,15 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati */ @Override public Mono insert(Mono objectToSave) { + + Assert.notNull(objectToSave, "Mono to insert must not be null!"); + return objectToSave.flatMap(this::insert); } /* * (non-Javadoc) - * @see org.springframework.data.mongodb.core.ReactiveMongoOperations#insert(org.reactivestreams.Publisher, java.lang.Class) + * @see org.springframework.data.mongodb.core.ReactiveMongoOperations#insert(reactor.core.publisher.Mono, java.lang.Class) */ @Override public Flux insertAll(Mono> batchToSave, Class entityClass) { @@ -942,10 +945,13 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati /* * (non-Javadoc) - * @see org.springframework.data.mongodb.core.ReactiveMongoOperations#insert(org.reactivestreams.Publisher, java.lang.String) + * @see org.springframework.data.mongodb.core.ReactiveMongoOperations#insert(reactor.core.publisher.Mono, java.lang.String) */ @Override public Flux insertAll(Mono> batchToSave, String collectionName) { + + Assert.notNull(batchToSave, "Batch to insert must not be null!"); + return Flux.from(batchToSave).flatMap(collection -> insert(collection, collectionName)); } @@ -955,6 +961,8 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati */ public Mono insert(T objectToSave) { + Assert.notNull(objectToSave, "Object to insert must not be null!"); + ensureNotIterable(objectToSave); return insert(objectToSave, determineEntityCollectionName(objectToSave)); } @@ -965,6 +973,8 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati */ public Mono insert(T objectToSave, String collectionName) { + Assert.notNull(objectToSave, "Object to insert must not be null!"); + ensureNotIterable(objectToSave); return doInsert(collectionName, objectToSave, this.mongoConverter); } @@ -1018,7 +1028,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati /* * (non-Javadoc) - * @see org.springframework.data.mongodb.core.ReactiveMongoOperations#insertAll(org.reactivestreams.Publisher) + * @see org.springframework.data.mongodb.core.ReactiveMongoOperations#insertAll(reactor.core.publisher.Mono) */ @Override public Flux insertAll(Mono> objectsToSave) { @@ -1088,6 +1098,9 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati */ @Override public Mono save(Mono objectToSave) { + + Assert.notNull(objectToSave, "Mono to save must not be null!"); + return objectToSave.flatMap(this::save); } @@ -1097,6 +1110,9 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati */ @Override public Mono save(Mono objectToSave, String collectionName) { + + Assert.notNull(objectToSave, "Mono to save must not be null!"); + return objectToSave.flatMap(o -> save(o, collectionName)); } @@ -1445,8 +1461,8 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati * @see org.springframework.data.mongodb.core.ReactiveMongoOperations#remove(reactor.core.publisher.Mono, java.lang.String) */ @Override - public Mono remove(Mono objectToRemove, String collection) { - return objectToRemove.flatMap(it -> remove(it, collection)); + public Mono remove(Mono objectToRemove, String collectionName) { + return objectToRemove.flatMap(it -> remove(it, collectionName)); } /* @@ -1464,12 +1480,12 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati * (non-Javadoc) * @see org.springframework.data.mongodb.core.ReactiveMongoOperations#remove(java.lang.Object, java.lang.String) */ - public Mono remove(Object object, String collection) { + public Mono remove(Object object, String collectionName) { Assert.notNull(object, "Object must not be null!"); - Assert.hasText(collection, "Collection name must not be null or empty!"); + Assert.hasText(collectionName, "Collection name must not be null or empty!"); - return doRemove(collection, getIdQueryFor(object), object.getClass()); + return doRemove(collectionName, getIdQueryFor(object), object.getClass()); } /** @@ -1582,8 +1598,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati return doRemove(collectionName, query, entityClass); } - protected Mono doRemove(final String collectionName, final Query query, - final Class entityClass) { + protected Mono doRemove(String collectionName, Query query, @Nullable Class entityClass) { if (query == null) { throw new InvalidDataAccessApiUsageException("Query passed in to remove can't be null!"); @@ -1645,8 +1660,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati */ @Override public Flux findAllAndRemove(Query query, String collectionName) { - - return findAllAndRemove(query, null, collectionName); + return (Flux) findAllAndRemove(query, Object.class, collectionName); } /* @@ -1663,7 +1677,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati * @see org.springframework.data.mongodb.core.ReactiveMongoOperations#findAllAndRemove(org.springframework.data.mongodb.core.query.Query, java.lang.Class, java.lang.String) */ @Override - public Flux findAllAndRemove(Query query, @Nullable Class entityClass, String collectionName) { + public Flux findAllAndRemove(Query query, Class entityClass, String collectionName) { return doFindAndDelete(collectionName, query, entityClass); } @@ -1681,7 +1695,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati * @see org.springframework.data.mongodb.core.ReactiveMongoOperations#tail(org.springframework.data.mongodb.core.query.Query, java.lang.Class, java.lang.String) */ @Override - public Flux tail(Query query, Class entityClass, String collectionName) { + public Flux tail(@Nullable Query query, Class entityClass, String collectionName) { if (query == null) { @@ -1938,7 +1952,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati * @return the List of converted objects. */ protected Mono doFindAndRemove(String collectionName, Document query, Document fields, Document sort, - Collation collation, Class entityClass) { + @Nullable Collation collation, Class entityClass) { if (LOGGER.isDebugEnabled()) { LOGGER.debug(String.format("findAndRemove using query: %s fields: %s sort: %s for class: %s in collection: %s", @@ -1955,8 +1969,6 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati protected Mono doFindAndModify(String collectionName, Document query, Document fields, Document sort, Class entityClass, Update update, FindAndModifyOptions options) { - FindAndModifyOptions optionsToUse = options != null ? options : new FindAndModifyOptions(); - MongoPersistentEntity entity = mappingContext.getPersistentEntity(entityClass); return Mono.defer(() -> { @@ -1973,7 +1985,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati collectionName)); } - return executeFindOneInternal(new FindAndModifyCallback(mappedQuery, fields, sort, mappedUpdate, optionsToUse), + return executeFindOneInternal(new FindAndModifyCallback(mappedQuery, fields, sort, mappedUpdate, options), new ReadDocumentCallback(this.mongoConverter, entityClass, collectionName), collectionName); }); } @@ -1990,7 +2002,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati * @param savedObject * @param id */ - private void populateIdIfNecessary(Object savedObject, Object id) { + private void populateIdIfNecessary(Object savedObject, @Nullable Object id) { if (id == null) { return; @@ -2030,22 +2042,20 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati } protected void ensureNotIterable(Object o) { - if (null != o) { - boolean isIterable = o.getClass().isArray(); + boolean isIterable = o.getClass().isArray(); - if (!isIterable) { - for (Class iterableClass : ITERABLE_CLASSES) { - if (iterableClass.isAssignableFrom(o.getClass()) || o.getClass().getName().equals(iterableClass.getName())) { - isIterable = true; - break; - } + if (!isIterable) { + for (Class iterableClass : ITERABLE_CLASSES) { + if (iterableClass.isAssignableFrom(o.getClass()) || o.getClass().getName().equals(iterableClass.getName())) { + isIterable = true; + break; } } + } - if (isIterable) { - throw new IllegalArgumentException("Cannot use a collection here."); - } + if (isIterable) { + throw new IllegalArgumentException("Cannot use a collection here."); } } @@ -2213,7 +2223,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati return null; } - String determineCollectionName(Class entityClass) { + String determineCollectionName(@Nullable Class entityClass) { if (entityClass == null) { throw new InvalidDataAccessApiUsageException( diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateTests.java index 710d482d9..43c0cbc4f 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateTests.java @@ -461,6 +461,24 @@ public class ReactiveMongoTemplateTests { StepVerifier.create(template.findOne(new Query(), Sample.class)).expectNext(data).verifyComplete(); } + @Test // DATAMONGO-1774 + public void testFindAllAndRemoveByCollectionReturnsAndRemovesDocuments() { + + Sample spring = new Sample("100", "spring"); + Sample data = new Sample("200", "data"); + Sample mongodb = new Sample("300", "mongodb"); + + StepVerifier.create(template.insert(Arrays.asList(spring, data, mongodb), Sample.class)) // + .expectNextCount(3) // + .verifyComplete(); + + Query qry = query(where("field").in("spring", "mongodb")); + + StepVerifier.create(template.findAllAndRemove(qry, "sample")).expectNextCount(2).verifyComplete(); + + StepVerifier.create(template.findOne(new Query(), Sample.class)).expectNext(data).verifyComplete(); + } + @Test(expected = IllegalArgumentException.class) // DATAMONGO-1774 public void removeWithNullShouldThrowError() { template.remove((Object)null).subscribe();