7

我已经开始使用spring-data-mongo一个有很多东西需要持久化的应用程序。

我们实际上选择了 mongo,因为它是这样宣传的。现在沉迷于 spring,我们发现使用它的一些功能非常轻松(感谢辛勤工作的 spring 数据人员)。

但是有一件事:带有 over 的文档60 fieldsspeed所以我的问题scalability是spring-data-mongo只能像它dirty fields一样更新吗?有点像这里 的解释mongo databaseHibernateArthur Ronald F D Garcia

感谢您阅读本文

4

1 回答 1

5

来自 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

于 2012-12-05T00:31:17.040 回答