diff --git a/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/MongoOperationsExtensions.kt b/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/MongoOperationsExtensions.kt index b386300ad..2ab2a730e 100644 --- a/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/MongoOperationsExtensions.kt +++ b/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/MongoOperationsExtensions.kt @@ -255,6 +255,16 @@ inline fun MongoOperations.findDistinct(query if (collectionName != null) findDistinct(query, field, collectionName, E::class.java, T::class.java) else findDistinct(query, field, E::class.java, T::class.java) +/** + * Extension for [MongoOperations.findAndModify] leveraging reified type parameters. + * + * @author Yejun Ho + * @since 5.0.2 + */ +inline fun MongoOperations.findAndModify(query: Query, update: UpdateDefinition, collectionName: String? = null): T? = + if (collectionName != null) findAndModify(query, update, T::class.java, collectionName) + else findAndModify(query, update, T::class.java) + /** * Extension for [MongoOperations.findAndModify] leveraging reified type parameters. * diff --git a/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ReactiveMongoOperationsExtensions.kt b/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ReactiveMongoOperationsExtensions.kt index 1b92fa15c..d44864b09 100644 --- a/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ReactiveMongoOperationsExtensions.kt +++ b/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ReactiveMongoOperationsExtensions.kt @@ -188,6 +188,15 @@ inline fun ReactiveMongoOperations.aggregate( inline fun ReactiveMongoOperations.geoNear(near: NearQuery, collectionName: String? = null): Flux> = if (collectionName != null) geoNear(near, T::class.java, collectionName) else geoNear(near, T::class.java) +/** + * Extension for [ReactiveMongoOperations.findAndModify] leveraging reified type parameters. + * + * @author Yejun Ho + * @since 5.0.2 + */ +inline fun ReactiveMongoOperations.findAndModify(query: Query, update: UpdateDefinition, collectionName: String? = null): Mono = + if (collectionName != null) findAndModify(query, update, T::class.java, collectionName) else findAndModify(query, update, T::class.java) + /** * Extension for [ReactiveMongoOperations.findAndModify] leveraging reified type parameters. * diff --git a/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/MongoOperationsExtensionsTests.kt b/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/MongoOperationsExtensionsTests.kt index f3f8bb043..59d75c37f 100644 --- a/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/MongoOperationsExtensionsTests.kt +++ b/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/MongoOperationsExtensionsTests.kt @@ -319,6 +319,27 @@ class MongoOperationsExtensionsTests { verify { operations.findAndModify(query, update, options, First::class.java) } } + @Test // GH-5128 + fun `findAndModify(Query, Update) with reified type parameter extension should call its Java counterpart`() { + + val query = mockk() + val update = mockk() + + operations.findAndModify(query, update) + verify { operations.findAndModify(query, update, First::class.java) } + } + + @Test // GH-5128 + fun `findAndModify(Query, Update, String) with reified type parameter extension should call its Java counterpart`() { + + val collectionName = "foo" + val query = mockk() + val update = mockk() + + operations.findAndModify(query, update, collectionName) + verify { operations.findAndModify(query, update, First::class.java, collectionName) } + } + @Test // DATAMONGO-1689 fun `findAndModify(Query, Update, FindAndModifyOptions, String) with reified type parameter extension should call its Java counterpart`() { diff --git a/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ReactiveMongoOperationsExtensionsTests.kt b/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ReactiveMongoOperationsExtensionsTests.kt index ca9399c35..a7e766521 100644 --- a/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ReactiveMongoOperationsExtensionsTests.kt +++ b/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ReactiveMongoOperationsExtensionsTests.kt @@ -162,6 +162,27 @@ class ReactiveMongoOperationsExtensionsTests { verify { operations.findById(id, First::class.java, collectionName) } } + @Test // GH-5128 + fun `findAndModify(Query, Update) with reified type parameter extension should call its Java counterpart`() { + + val query = mockk() + val update = mockk() + + operations.findAndModify(query, update) + verify { operations.findAndModify(query, update, First::class.java) } + } + + @Test // GH-5128 + fun `findAndModify(Query, Update, String) with reified type parameter extension should call its Java counterpart`() { + + val collectionName = "foo" + val query = mockk() + val update = mockk() + + operations.findAndModify(query, update, collectionName) + verify { operations.findAndModify(query, update, First::class.java, collectionName) } + } + @Test // DATAMONGO-1689 fun `findAndModify(Query, Update, FindAndModifyOptions) with reified type parameter extension should call its Java counterpart`() {