【问题标题】:Updating a MongoDB collection with Java Spring Repositories使用 Java Spring Repositories 更新 MongoDB 集合
【发布时间】:2015-10-13 02:34:16
【问题描述】:

我在使用 Java Spring 存储库 (these ones) 时遇到了一点问题。我有一个包含自定义 ID 字段的集合(因为我的应用程序中有一个约束阻止我使用 MongoDB ObjectID)以及一些数据。似乎 CrudRepository 接口中内置的 save() 方法只会在使用 ObjectID 保存时对数据库对象进行更新,否则它将添加对象的新实例。由于我使用的是自定义 ID 字段,这似乎意味着我必须先删除旧对象(如果存在),然后插入一个带有更新字段的全新对象。显然这很慢(我必须进行 3 次数据库调用:一次查看对象是否存在,一次删除它,一次插入它,而不是 1),所以我想确保:

有没有办法使用 Java Spring 存储库在不使用对象的 ObjectID 的情况下对集合进行更新?谢谢。

【问题讨论】:

    标签: java repository spring-data mongodb-java


    【解决方案1】:

    您可以使用 MongoOperations api,

    http://docs.spring.io/spring-data/data-mongo/docs/current/api/org/springframework/data/mongodb/core/MongoOperations.html#findAndModify-org.springframework.data.mongodb.core.query.Query-org.springframework.data.mongodb.core.query.Update-java.lang.Class-

    只需在自定义 mongo dao 实现中自动装配 mongoOperation,即可使用此代码

    mongoOperation.findAndModify(Query query, Update update,Class<T> entityClass)
    

    查询包含条件,更新包含您要应用的更改,并且 entityClass 与 mongo 文档相关。

    您也可以按照本教程中的其他类似操作进行操作

    http://www.mkyong.com/mongodb/spring-data-mongodb-update-document/

    【讨论】:

    • 感谢您的回答!问题是我想在我的应用程序中利用 MongoRepository 的另一个功能,MongoOperations(和 MongoTemplate)似乎不允许,所以我需要使用 MongoRepository。我确实知道使用其他方法相对来说这是微不足道的。
    • 你能详细说明一下吗?
    • 其实使用 mongoOperation 并不禁止你继续使用 MongoRepository。事实上,MongoRepository 内部使用了 mongoOperations。因此,对于更多受控操作,Spring Data 有意设计为公开 MongoOperations 以在自定义 dao impl 模式中使用它。在此处关注相关讨论,stackoverflow.com/questions/17035419/… 注意,示例使用 MongoTemplate,它也与 MongoOperation 相同,因为 MongoTemplate 是 MongoOperation 的子类
    猜你喜欢
    • 2017-11-29
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 2022-01-07
    • 1970-01-01
    相关资源
    最近更新 更多