Spring Data - 如何编写 MongoRepository 方法进行 findAndModify 操作?

BSM*_*BSM 5 mongodb spring-data mongodb-query

我使用了 MongoTemplate 的 findAndModify 方法,如下所示,

 public Organization findAndModifyOrganization(Integer orgId, String name, Integer empId)
{
    Query query = new Query();
    query.addCriteria(Criteria.where("employees.id").is(empId));
    query.addCriteria(Criteria.where("id").is(orgId));

    Update update = new Update();
    update.set("employees.$.name", name);
    Organization org = mongoTemplate.findAndModify(query, update, new FindAndModifyOptions().returnNew(true), Organization.class);

    return org;
} 
Run Code Online (Sandbox Code Playgroud)

//类结构

@Document
public class Organization {
    private Integer id;
    private List<Employee> employees;
}

@Document
public class Employee {
    private Integer id;
    private String name;
}
Run Code Online (Sandbox Code Playgroud)

我想使用 Spring Data MongoRepository 方法来实现上述目标。请告诉我如何使用 MongoRepository 方法更新员工姓名。

Mar*_*ich 1

据我所知,这是不可能以优雅的方式实现的。在支持不同数据库的背景下,存储库的概念似乎更加通用。

如果您需要充分的灵活性,您可以不使用 spring 生成的存储库功能并使用您自己的实现。您还可以为您的存储库创建一个自己的基类,以帮助您重用经常需要的功能。org.springframework.data.mongodb.repository.support.SimpleMongoRepository在 Spring-Data-MongoDB 中,您可以找到可以用作起点的类。

另请参阅此线程中的答案:Spring Data's MongoTemplate 和 MongoRepository 之间的区别是什么?