【问题标题】:Custom method for update query with spring data MongoRepository使用 Spring Data MongoRepository 进行更新查询的自定义方法
【发布时间】:2018-10-05 19:10:42
【问题描述】:

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

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

如何编写一个自定义方法,在满足条件时更新所有条目。

例如,如果分配 id 为“xyz”,则将文档倾斜字段设置为“abc”?

【问题讨论】:

    标签: java mongodb spring-boot spring-data mongorepository


    【解决方案1】:

    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】:

    如果您的service 类中有autowired 属性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 的自定义更新操作方法
    • 你得到答案了吗?
    【解决方案3】:

    我找到了com.mongodb.MongoClient来实现上面的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-05
      • 2020-04-12
      • 2016-09-17
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 2017-08-15
      • 2020-01-23
      相关资源
      最近更新 更多