Spring-Data MongoDB更新所有文档字段

时间:2013-07-18 12:10:25

标签: java mongodb spring-data-mongodb

我正在从SQL(JPA)迁移到MongoDB,我听说Spring-Data很棒,所以我正在使用它,特别是对于DBObjects和应用程序对象之间的整个转换。

我的大多数要求都得到满足,但我不知道如何使用MongoDB将JPA的更新功能迁移到Spring-Data: 1.保存/更新是隐式的,由hibernate处理 2.更新根据给定对象更新所有值

与JPA类似,使用com.mongodb.DB时,您可以执行单行“更新”操作:

public boolean update(String collectionName, DBObject referenceObject, DBObject object) {
    WriteResult result = this.db.getCollection(collectionName).update(referenceObject, object);
    return parseWriteResult(result);
}

根据给定对象中的值保存/更新等于引用对象的对象,具体取决于对象是否在DB中。

现在我正在使用MongoOperations,我只能使用“Update”对象更新对象,我必须一次为一个值播种:

MongoOperations client = ...

...

Update update = new Update();
update.set("past", 1);
update.set("current", 3);

...

client.updateFirst(query, update, clazz);

有没有办法使用JPA中的功能?

1 个答案:

答案 0 :(得分:1)

我不确定我是否100%理解您的问题,但您似乎尝试使用Spring-Data将数据从使用Hibernate的SQL数据库迁移到MongoDB。

我们最近使用Spring-Data将我们应用程序中的所有二进制数据从Apache Jackrabbit迁移到MongoDB。此外,还有一个实例,我们仍然在我们的SQL数据库中存储了一些二进制数据,这些数据库也已迁移:

我们按以下方式迁移了这些数据:

  • 检索hibernate所需的所有实体。
  • 创建MongoDB文档的新实例。
  • 遍历所有这些实体,将数据从休眠实体复制到MongoDB文档。
  • 为每个文档致电MongoOperations#save()

您还提到了有关更新的内容:

要更新特定文档,只需使用MongoOperations#updateFirst()

或者您可以使用MongoOperatons#findOne()查找所需的对象,然后更新所需的字段,然后调用MongoOperations#save(),如果您阅读了javadoc,则会看到执行upsert。