【发布时间】:2019-05-11 15:34:59
【问题描述】:
我有一个用例,其中视图允许用户更新多个对象并一次提交,我怎样才能使这个原子化?
{_id: parent,
childrenA: [
{_id: child1, property: "update-me", property2: "leave-alone"},
{_id: child2, property: "leave-alone", property2: "update-me"}
],
propertyA: "update-me",
propertyB: "leave-alone", //someone else needs to be able to update this concurrently with this change.
childrenB:[
{property: "update-me", property2: "leave-alone"},
{property: "leave-alone", property2: "update-me"}
],
}
属性可能是也可能不是另一个嵌套对象数组。 这是否可能以编程方式进行?
编辑:我需要提一下,我无法可靠地更新整个文档 在某些情况下,可以替换嵌入的文档(地址,也许)
但是,我需要汇总更改列表,例如[{"child[Id=child1].FirstName", "newName"},{"child[Id=child3].LastName", "newName"}(不一定是那个语法,而是一个变化字典)
【问题讨论】:
-
单个文档(包括其子文档)的更新在 Mongo DB 中是原子的。
-
@Metheny - 我听说了,但是如何指定对数组中嵌入文档的字段级别更改的多个操作?我无法替换整个文档,因为多个服务可能正在使用此文档存储支持的服务/此服务侦听的发布事件
-
从 4.0 版开始使用新的事务支持怎么样?
-
也许这会有所帮助:docs.mongodb.com/manual/reference/operator/update/positional 如上所述,对单个文档的任何操作都被视为原子操作:stackoverflow.com/questions/21798432/…
-
是的,你是对的。另一种尝试,似乎以下允许根据查询更新多个数组项:docs.mongodb.com/manual/reference/operator/update/…