MongoDB 特定数据操作方法
除了 查询方法 之外,还可以使用专门的方法更新数据。
更新方法
您还可以使用上表中的关键字创建查询,以识别匹配的文档以便对其运行更新。实际的更新操作由方法本身上的 @Update
注解定义,如下面的清单所示。请注意,派生查询的命名方案以 find
开头。仅当与 @Query
结合使用时,才能使用 update
(如 updateAllByLastname(…)
)。
更新将应用于**所有**匹配的文档,并且**无法**通过传入 Page
或使用任何 限制关键字 来限制范围。返回类型可以是 void
或数值类型(例如 long
),以保存已修改文档的数量。
示例 1. 更新方法
public interface PersonRepository extends CrudRepository<Person, String> {
@Update("{ '$inc' : { 'visits' : 1 } }")
long findAndIncrementVisitsByLastname(String lastname); (1)
@Update("{ '$inc' : { 'visits' : ?1 } }")
void findAndIncrementVisitsByLastname(String lastname, int increment); (2)
@Update("{ '$inc' : { 'visits' : ?#{[1]} } }")
long findAndIncrementVisitsUsingSpELByLastname(String lastname, int increment); (3)
@Update(pipeline = {"{ '$set' : { 'visits' : { '$add' : [ '$visits', ?1 ] } } }"})
void findAndIncrementVisitsViaPipelineByLastname(String lastname, int increment); (4)
@Update("{ '$push' : { 'shippingAddresses' : ?1 } }")
long findAndPushShippingAddressByEmail(String email, Address address); (5)
@Query("{ 'lastname' : ?0 }")
@Update("{ '$inc' : { 'visits' : ?1 } }")
void updateAllByLastname(String lastname, int increment); (6)
}
仓库更新不会发出持久化或映射生命周期事件。 |
删除方法
上表中的关键字可以与 delete…By
或 remove…By
结合使用,以创建删除匹配文档的查询。
Delete…By
查询-
命令式
-
响应式
public interface PersonRepository extends MongoRepository<Person, String> {
List <Person> deleteByLastname(String lastname); (1)
Long deletePersonByLastname(String lastname); (2)
@Nullable
Person deleteSingleByLastname(String lastname); (3)
Optional<Person> deleteByBirthdate(Date birthdate); (4)
}
1 | 使用 List 作为返回类型会在实际删除之前检索并返回所有匹配的文档。 |
2 | 数值返回类型会直接删除匹配的文档,并返回删除的文档总数。 |
3 | 单个域类型结果会检索并删除第一个匹配的文档。 |
4 | 与 3 相同,但包装在 Optional 类型中。 |
public interface PersonRepository extends ReactiveMongoRepository<Person, String> {
Flux<Person> deleteByLastname(String lastname); (1)
Mono<Long> deletePersonByLastname(String lastname); (2)
Mono<Person> deleteSingleByLastname(String lastname); (3)
}
1 | 使用 Flux 作为返回类型会在实际删除之前检索并返回所有匹配的文档。 |
2 | 数值返回类型会直接删除匹配的文档,并返回删除的文档总数。 |
3 | 单个域类型结果会检索并删除第一个匹配的文档。 |