Spring Data Mongo只能更新文档中的脏字段吗?

时间:2012-11-15 12:48:19

标签: mongodb spring-data spring-data-mongodb

我已经开始将spring-data-mongo用于需要持久存储的应用程序。

我们实际上选择了mongo,因为它的广告是这样的。现在沉迷于春天,我们发现我们的生活非常容易使用它的一些功能(对于努力工作的弹簧数据人来说是赞誉)。

但有一件事:超过60 fields的文件。所以我关于speedscalability的问题是,spring-data-mongo只更新dirty fields中的mongo database就像Hibernate那样吗?有点像是如何解释hereArthur Ronald F D Garcia

感谢您阅读本文

1 个答案:

答案 0 :(得分:3)

来自MongoDB文档:

  

如果 update 参数仅包含字段和值对,则update()方法将现有文档替换为 update 参数中的文档,但_id字段除外

换句话说,MongoDB的更新与您描述的完全一致。因此,如果您在测试收集中有此文档:

{ "_id" : "123", "oldfield" : "oldvalue" }

在mongo CLI中运行以下命令:

db.test.update({"_id": "123"}, { newfield : "value" })

新文件如下所示:

{"_id": "123", "newfield" : "value"}

如果您只想修改某些字段,可以使用$ set运算符来设置一个或多个字段的值。在使用spring数据时,应使用MongoTemplate类进行此更新:

Query q = new Query(Criteria.where("_id").is("123"));
Update u = Update
            .update("newfield", "value")
            .set("oldfield", "newvalue");

this.template.findAndModify(query, update, Entity.class);

你可以在这里阅读有关$ set运算符和mongodb更新的内容: http://docs.mongodb.org/manual/reference/operators/#_S_set http://docs.mongodb.org/manual/applications/update