MongoDB对集合的并行更新
我是MongoDB的新手,我有一个问题,比如说我有一个产品系列`MongoDB对集合的并行更新,mongodb,mongodb-query,Mongodb,Mongodb Query,我是MongoDB的新手,我有一个问题,比如说我有一个产品系列` { _id: 100, sku: "abc123", quantity: 250, instock: true, reorder: false, details: { model: "14Q2", make: "xyz" }, tags: [ "apparel", "clothing" ], ratings: [ { by: "ijk", rating: 4 } ] } ` 我想用不同线程中的两个
{
_id: 100,
sku: "abc123",
quantity: 250,
instock: true,
reorder: false,
details: { model: "14Q2", make: "xyz" },
tags: [ "apparel", "clothing" ],
ratings: [ { by: "ijk", rating: 4 } ]
}
`
我想用不同线程中的两个update语句(Thread1)同时更新此产品集合`
db.products.update(
{ _id: 100 },
{ $set:
{
quantity: 500,
details: { model: "14Q3"}
}
}
)
线程2,
db.products.update(
{ _id: 100 },
{ $set: { "details.make": "zzz" } }
)
`
由于这两个线程在同一个文档中同时发生,我们只想知道,不管它发生的顺序如何,输出都是
{“_id”:100,“sku”:“abc123”,“quantity”:500,“instock”:true,“reorder”:false,“details”:{“model”:“14Q3”,“make”:“zzz”},“tags”:[“apparel”,“count”],“ratings”:[{“by”:“ijk”,“rating”:4}]}
Mongo支持单个文档中的这种原子行为?MongoDB中的单个文档更新是,但是由于您在“线程1”更新中没有使用点表示法,如果第二次更新,整个详细信息
子文档将被覆盖到{model:“14Q3”}
但是,如果将该更新更改为使用点表示法,则更新顺序与此无关:
db.products.update(
{ _id: 100 },
{ $set:
{
quantity: 500,
"details.model": "14Q3"
}
}
)
很高兴知道这一点,非常感谢。