【问题标题】:Save or update document by email field通过电子邮件字段保存或更新文档
【发布时间】:2021-07-21 18:48:55
【问题描述】:

我在我的项目中使用 Java Spring Boot 和 MongoDB 存储库。我需要在 MongoDB 中保存和更新文档。

可以通过 CrudRepository 接口中的save() 方法在 MongoDB 中保存或更新文档。正如我从文档 MongoDB 机制中了解的那样,查找具有相同 id 的文档并更新它以防万一找到具有相同 id 的文档 或保存以防万一找不到。

就我而言,我需要自定义此行为并保存或更新新文档,而不是根据 id 字段而是根据 email 字段。如果存在具有相同电子邮件的文档,则应对其进行更新,如果不存在,则应将其另存为新文档。

以下是文档示例:

@Document("User")
@Data
public class User {
    @Id
    private String id = "abc123";
    private String email = "john@gmail.com";
    private String password = "some_hashed_password";
    private String name John Johnson;
}

我如何尝试保存/更新它:

User user = userRepository.save(user);

所以我希望如果用户集合中存在电子邮件“john@gmail.com”的用户,文档将被更新,如果用户集合文档的电子邮件“john@gmail.com”不存在它将创建一个。

是否可以根据我的需要自定义保存/更新行为,以便根据电子邮件更新或保存文档 字段,以及如何实现?

【问题讨论】:

    标签: java spring mongodb jpa spring-data-mongodb


    【解决方案1】:

    你必须先查一下:

    User user = userRepository.findByEmail("john@gmail.com")
    

    然后更新它找到的用户。当您随后保存用户时,它将更新该用户。

    如果您使用 MongoTemplate,它有更多可能适合您的用例的方法,尽管使用存储库会使事情变得简单得多,而且您不必担心样板代码。您可以查看https://www.baeldung.com/spring-data-mongodb-tutorial 了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-10
      • 2020-05-06
      • 2019-08-29
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多