Spring Data MongoRepository的自定义更新查询方法

4

我正在使用org.springframework.data.mongodb.repository.MongoRepository。我已经编写了一些自定义方法,例如下面所示:

public interface DocRepository extends MongoRepository<Doc, String> {
     Doc findByDocIdAndAssignmentId(final String docId, final String assignemtId);
}

如何编写一个自定义方法,在满足某些条件时可以更新所有记录。

比如当任务ID是“xyz”时,将文档标题字段设置为“abc”?

3个回答

9

1) 您需要创建接口,例如CustomDocRepository,并将此接口作为您的DocRepository的基础添加:

public interface DocRepository extends MongoRepository<Doc, String>, CustomDocRepository {

    void updateDocumentTitle(String id, String title);

}

2) 您需要为DocRepository添加实现:

@Repository
public class CustomDocRepositoryImpl implements DocRepository {
  @Autowired
  private MongoTemplate mongoTemplate;


@Override
public void updateDocumentTitle(String id, String title) {
    Query query = new Query().addCriteria(where("_id").is(id));

    Update update = new Update();
    update.set("title", title);
    mongoTemplate.update(Doc.class).matching(query).apply(update).first();
}
}

这就是你需要做的全部内容。


2
9.6. Spring Data Repositories 的自定义实现 - Languoguang
2
在存储库中编写一个带有@Query注释的方法来查询,没有可能吗? - Philippe Gioseffi

0
假设你的service类中有一个自动装配属性mongoTemplate,请添加以下代码来更新文档。
Query query = new Query();
query.addCriteria(Criteria.where("assignmentId").is("xyz"))
Update update = new Update();
update.set("title", "abc");
mongoTemplate.updateFirst(query, update, Doc.class);

对于更新目的,您不需要使用findByDocIdAndAssignmentId


实际上我没有mongoTemplate。我正在寻找一种自定义方法来进行更新操作,而不使用mongoTemplate。 - Harshana
你得到答案了吗? - Payal

-3
我发现使用com.mongodb.MongoClient可以实现上述功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接