DATAMONGO-1774 - Polishing.

Synchronize javadoc between reactive and imperative operations interfaces. Add trailing punctuation. Consistent naming for collection name parameter.

Use Object.class instead of null in ReactiveMongoTemplate.findAllAndRemove to prevent null-pointer exceptions.

Original pull request: #498.
This commit is contained in:
Mark Paluch
2017-09-06 11:38:57 +02:00
parent 301dd51560
commit 2d21b04a12
5 changed files with 423 additions and 365 deletions

View File

@@ -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 <T> return type
* @param <T> return type.
* @return a result object returned by the action or {@literal null}.
*/
@Nullable
@@ -127,9 +128,9 @@ public interface MongoOperations extends FluentMongoOperations {
* <p/>
* Allows for returning a result object, that is a domain object or a collection of domain objects.
*
* @param <T> 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 <T> return type.
* @return a result object returned by the action or {@literal null}.
*/
@Nullable
@@ -140,10 +141,10 @@ public interface MongoOperations extends FluentMongoOperations {
* <p/>
* Allows for returning a result object, that is a domain object or a collection of domain objects.
*
* @param <T> 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 <T> return type.
* @return a result object returned by the action or {@literal null}.
*/
@Nullable
@@ -155,9 +156,10 @@ public interface MongoOperations extends FluentMongoOperations {
* <p>
* Returns a {@link CloseableIterator} that wraps the a Mongo DB {@link Cursor} that needs to be closed.
*
* @param <T> 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 <T> element return type
* @return will never be {@literal null}.
* @since 1.7
*/
@@ -169,10 +171,11 @@ public interface MongoOperations extends FluentMongoOperations {
* <p>
* Returns a {@link CloseableIterator} that wraps the a Mongo DB {@link Cursor} that needs to be closed.
*
* @param <T> 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 <T> 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.
*/
<T> MongoCollection<Document> createCollection(Class<T> 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.
*/
<T> MongoCollection<Document> createCollection(Class<T> 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<Document> 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<Document> createCollection(String collectionName, @Nullable CollectionOptions collectionOptions);
/**
* A set of collection names.
*
* @return list of collection names
* @return list of collection names.
*/
Set<String> 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.
* <p/>
* 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.
* <p/>
* 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.
*/
<T> List<T> findAll(Class<T> entityClass);
@@ -338,14 +341,14 @@ public interface MongoOperations extends FluentMongoOperations {
* Query for a list of objects of type T from the specified collection.
* <p/>
* 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.
* <p/>
* 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.
*/
<T> List<T> findAll(Class<T> 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
*/
<T> GroupByResults<T> group(@Nullable Criteria criteria, String inputCollectionName, GroupBy groupBy, Class<T> entityClass);
<T> GroupByResults<T> group(@Nullable Criteria criteria, String inputCollectionName, GroupBy groupBy,
Class<T> 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.
* <p/>
* 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.
* <p/>
* 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> T findOne(Query query, Class<T> entityClass);
@@ -605,16 +609,16 @@ public interface MongoOperations extends FluentMongoOperations {
* type.
* <p/>
* 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.
* <p/>
* 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> T findOne(Query query, Class<T> 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.
* <p/>
* 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.
* <p/>
* 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.
*/
<T> List<T> find(Query query, Class<T> 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.
* <p/>
* 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.
* <p/>
* 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.
*/
<T> List<T> find(Query query, Class<T> 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 <T>
* @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 <T>
* @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> T findById(Object id, Class<T> entityClass, String collectionName);
/**
* Triggers <a href="http://docs.mongodb.org/manual/reference/method/db.collection.findAndModify/">findAndModify <a/>
* Triggers <a href="https://docs.mongodb.org/manual/reference/method/db.collection.findAndModify/">findAndModify<a/>
* 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> T findAndModify(Query query, Update update, Class<T> entityClass);
/**
* Triggers <a href="http://docs.mongodb.org/manual/reference/method/db.collection.findAndModify/">findAndModify <a/>
* Triggers <a href="https://docs.mongodb.org/manual/reference/method/db.collection.findAndModify/">findAndModify<a/>
* 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> T findAndModify(Query query, Update update, Class<T> entityClass, String collectionName);
/**
* Triggers <a href="http://docs.mongodb.org/manual/reference/method/db.collection.findAndModify/">findAndModify <a/>
* Triggers <a href="https://docs.mongodb.org/manual/reference/method/db.collection.findAndModify/">findAndModify<a/>
* 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> T findAndModify(Query query, Update update, FindAndModifyOptions options, Class<T> entityClass);
/**
* Triggers <a href="http://docs.mongodb.org/manual/reference/method/db.collection.findAndModify/">findAndModify <a/>
* Triggers <a href="https://docs.mongodb.org/manual/reference/method/db.collection.findAndModify/">findAndModify<a/>
* 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> T findAndModify(Query query, Update update, FindAndModifyOptions options, Class<T> 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.
* <p/>
* 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.
* <p/>
* 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> T findAndRemove(Query query, Class<T> 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.
* <p/>
* 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.
* <p/>
* 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<? extends Object> 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'.
* <p/>
* 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.
* <p/>
* 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'.
* <p/>
* 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.
* <p/>
* 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 <a
* property type will be handled by Spring's BeanWrapper class that leverages Type Conversion API. See <a
* http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html#core-convert">Spring's
* Type Conversion"</a> 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 {
* <strong>NOTE:</strong> 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. <br />
*
* @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 {
* <strong>NOTE:</strong> 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 {
* <strong>NOTE:</strong> 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
*/
<T> List<T> 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
*/
<T> List<T> findAllAndRemove(Query query, Class<T> 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
*/
<T> List<T> findAllAndRemove(Query query, Class<T> entityClass, String collectionName);

View File

@@ -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());
}
/**

View File

@@ -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<Document> 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<Document> executeCommand(Document command, @Nullable ReadPreference readPreference);
@@ -106,8 +108,9 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
* <p/>
* Allows for returning a result object, that is a domain object or a collection of domain objects.
*
* @param <T> 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 <T> return type.
* @return a result object returned by the action
*/
<T> Flux<T> execute(ReactiveDatabaseCallback<T> action);
@@ -117,10 +120,10 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
* <p/>
* 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 <T> return type
* @param action callback object that specifies the MongoDB action
* @return a result object returned by the action or <tt>null</tt>
* @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 <T> return type.
* @return a result object returned by the action or {@literal null}.
*/
<T> Flux<T> execute(Class<?> entityClass, ReactiveCollectionCallback<T> action);
@@ -129,51 +132,53 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
* <p/>
* Allows for returning a result object, that is a domain object or a collection of domain objects.
*
* @param <T> 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 <tt>null</tt>
* @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 <T> return type.
* @return a result object returned by the action or {@literal null}.
*/
<T> Flux<T> execute(String collectionName, ReactiveCollectionCallback<T> 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.
*/
<T> Mono<MongoCollection<Document>> createCollection(Class<T> 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.
*/
<T> Mono<MongoCollection<Document>> createCollection(Class<T> entityClass, CollectionOptions collectionOptions);
<T> Mono<MongoCollection<Document>> createCollection(Class<T> 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<MongoCollection<Document>> 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<MongoCollection<Document>> createCollection(String collectionName, CollectionOptions collectionOptions);
/**
* A set of collection names.
*
* @return Flux of collection names
* @return Flux of collection names.
*/
Flux<String> getCollectionNames();
@@ -182,7 +187,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
* <p/>
* 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<Document> getCollection(String collectionName);
@@ -192,7 +197,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
* <p/>
* 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.
*/
<T> Mono<Boolean> collectionExists(Class<T> entityClass);
@@ -202,7 +207,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
* <p/>
* 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<Boolean> collectionExists(String collectionName);
@@ -212,7 +217,7 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
* <p/>
* 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}.
*/
<T> Mono<Void> dropCollection(Class<T> 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.
*/
<T> Flux<T> findAll(Class<T> 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.
*/
<T> Flux<T> findAll(Class<T> 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.
*/
<T> Mono<T> findOne(Query query, Class<T> 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.
*/
<T> Mono<T> findOne(Query query, Class<T> 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<Boolean> 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<Boolean> 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<Boolean> 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.
*/
<T> Flux<T> find(Query query, Class<T> 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.
*/
<T> Flux<T> find(Query query, Class<T> 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 <T>
* @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.
*/
<T> Mono<T> findById(Object id, Class<T> 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 <T>
* @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.
*/
<T> Mono<T> findById(Object id, Class<T> 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.
*/
<T> Flux<GeoResult<T>> geoNear(NearQuery near, Class<T> 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.
*/
<T> Flux<GeoResult<T>> geoNear(NearQuery near, Class<T> entityClass, String collectionName);
/**
* Triggers <a href="https://docs.mongodb.org/manual/reference/method/db.collection.findAndModify/">findAndModify <a/>
* Triggers <a href="https://docs.mongodb.org/manual/reference/method/db.collection.findAndModify/">findAndModify<a/>
* 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.
*/
<T> Mono<T> findAndModify(Query query, Update update, Class<T> entityClass);
/**
* Triggers <a href="https://docs.mongodb.org/manual/reference/method/db.collection.findAndModify/">findAndModify <a/>
* Triggers <a href="https://docs.mongodb.org/manual/reference/method/db.collection.findAndModify/">findAndModify<a/>
* 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.
*/
<T> Mono<T> findAndModify(Query query, Update update, Class<T> entityClass, String collectionName);
/**
* Triggers <a href="https://docs.mongodb.org/manual/reference/method/db.collection.findAndModify/">findAndModify <a/>
* Triggers <a href="https://docs.mongodb.org/manual/reference/method/db.collection.findAndModify/">findAndModify<a/>
* 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.
*/
<T> Mono<T> findAndModify(Query query, Update update, FindAndModifyOptions options, Class<T> entityClass);
/**
* Triggers <a href="https://docs.mongodb.org/manual/reference/method/db.collection.findAndModify/">findAndModify <a/>
* Triggers <a href="https://docs.mongodb.org/manual/reference/method/db.collection.findAndModify/">findAndModify<a/>
* 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.
*/
<T> Mono<T> findAndModify(Query query, Update update, FindAndModifyOptions options, Class<T> 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.
*/
<T> Mono<T> findAndRemove(Query query, Class<T> 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<Long> 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<Long> 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<Long> count(Query query, Class<?> entityClass, String collectionName);
Mono<Long> 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 {
* <p/>
* 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.
*/
<T> Mono<T> insert(T objectToSave);
@@ -625,27 +632,27 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
* <p/>
* 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.
*/
<T> Mono<T> 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.
*/
<T> Flux<T> insert(Collection<? extends T> 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.
*/
<T> Flux<T> insert(Collection<? extends T> 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.
*/
<T> Flux<T> insertAll(Collection<? extends T> objectsToSave);
@@ -672,26 +679,26 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
* <p/>
* 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.
*/
<T> Mono<T> insert(Mono<? extends T> 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.
*/
<T> Flux<T> insertAll(Mono<? extends Collection<? extends T>> 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.
*/
<T> Flux<T> insertAll(Mono<? extends Collection<? extends T>> 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.
*/
<T> Flux<T> insertAll(Mono<? extends Collection<? extends T>> objectsToSave);
@@ -717,8 +724,8 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
* <a href="http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html#core-convert" >
* Spring's Type Conversion"</a> 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.
*/
<T> Mono<T> 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"</a> 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.
*/
<T> Mono<T> save(T objectToSave, String collectionName);
@@ -754,8 +761,8 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
* <a href="http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html#core-convert" >
* Spring's Type Conversion"</a> 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.
*/
<T> Mono<T> save(Mono<? extends T> 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"</a> 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.
*/
<T> Mono<T> save(Mono<? extends T> 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<UpdateResult> upsert(Query query, Update update, Class<?> entityClass);
@@ -795,11 +804,12 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
* <strong>NOTE:</strong> 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<UpdateResult> 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<UpdateResult> 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<UpdateResult> updateFirst(Query query, Update update, Class<?> entityClass);
@@ -833,26 +846,26 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
* <strong>NOTE:</strong> 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<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. <br />
* <strong>NOTE:</strong> 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<UpdateResult> 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<UpdateResult> updateMulti(Query query, Update update, Class<?> entityClass);
@@ -874,11 +888,12 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
* <strong>NOTE:</strong> 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<UpdateResult> 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<UpdateResult> updateMulti(final Query query, final Update update, Class<?> entityClass, String collectionName);
Mono<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
* @return the {@link DeleteResult} which lets you access the results of the previous delete.
*/
Mono<DeleteResult> 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<DeleteResult> remove(Object object, String collection);
Mono<DeleteResult> 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<DeleteResult> remove(Mono<? extends Object> 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<DeleteResult> remove(Mono<? extends Object> objectToRemove, String collection);
Mono<DeleteResult> remove(Mono<? extends Object> 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<DeleteResult> 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<DeleteResult> remove(Query query, Class<?> entityClass, String collectionName);
Mono<DeleteResult> 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 {
* <strong>NOTE:</strong> 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<DeleteResult> remove(Query query, String collectionName);
@@ -965,18 +983,18 @@ public interface ReactiveMongoOperations extends ReactiveFluentMongoOperations {
* <strong>NOTE:</strong> 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.
*/
<T> Flux<T> 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.
*/
<T> Flux<T> findAllAndRemove(Query query, Class<T> 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.
*/
<T> Flux<T> findAllAndRemove(Query query, Class<T> 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.
*/
<T> Flux<T> tail(Query query, Class<T> 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.
*/
<T> Flux<T> tail(Query query, Class<T> entityClass, String collectionName);

View File

@@ -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 <T> Mono<MongoCollection<Document>> createCollection(Class<T> entityClass,
CollectionOptions collectionOptions) {
@Nullable CollectionOptions collectionOptions) {
return createCollection(determineCollectionName(entityClass), collectionOptions);
}
@@ -928,12 +928,15 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati
*/
@Override
public <T> Mono<T> insert(Mono<? extends T> 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 <T> Flux<T> insertAll(Mono<? extends Collection<? extends T>> 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 <T> Flux<T> insertAll(Mono<? extends Collection<? extends T>> 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 <T> Mono<T> 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 <T> Mono<T> 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 <T> Flux<T> insertAll(Mono<? extends Collection<? extends T>> objectsToSave) {
@@ -1088,6 +1098,9 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati
*/
@Override
public <T> Mono<T> save(Mono<? extends T> 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 <T> Mono<T> save(Mono<? extends T> 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<DeleteResult> remove(Mono<? extends Object> objectToRemove, String collection) {
return objectToRemove.flatMap(it -> remove(it, collection));
public Mono<DeleteResult> remove(Mono<? extends Object> 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<DeleteResult> remove(Object object, String collection) {
public Mono<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());
}
/**
@@ -1582,8 +1598,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati
return doRemove(collectionName, query, entityClass);
}
protected <T> Mono<DeleteResult> doRemove(final String collectionName, final Query query,
final Class<T> entityClass) {
protected <T> Mono<DeleteResult> doRemove(String collectionName, Query query, @Nullable Class<T> 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 <T> Flux<T> findAllAndRemove(Query query, String collectionName) {
return findAllAndRemove(query, null, collectionName);
return (Flux<T>) 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 <T> Flux<T> findAllAndRemove(Query query, @Nullable Class<T> entityClass, String collectionName) {
public <T> Flux<T> findAllAndRemove(Query query, Class<T> 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 <T> Flux<T> tail(Query query, Class<T> entityClass, String collectionName) {
public <T> Flux<T> tail(@Nullable Query query, Class<T> entityClass, String collectionName) {
if (query == null) {
@@ -1938,7 +1952,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati
* @return the List of converted objects.
*/
protected <T> Mono<T> doFindAndRemove(String collectionName, Document query, Document fields, Document sort,
Collation collation, Class<T> entityClass) {
@Nullable Collation collation, Class<T> 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 <T> Mono<T> doFindAndModify(String collectionName, Document query, Document fields, Document sort,
Class<T> 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<T>(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(

View File

@@ -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();