在mongodb手册中,单个文档的原子操作有example。
book = {
_id: 123456789,
title: "MongoDB: The Definitive Guide",
available: 3,
checkout: [ { by: "joe", date: ISODate("2012-10-15") } ]
}
手册指出以下操作是原子的:
db.books.findAndModify ( {
query: {
_id: 123456789,
available: { $gt: 0 }
},
update: {
$inc: { available: -1 },
$push: { checkout: { by: "abc", date: new Date() } }
}
} )
我的问题是如果可用字段是嵌入式文档会发生什么。如下:
book = {
_id: 123456789,
title: "MongoDB: The Definitive Guide",
available: [ { value: 3, valueFloat: 3.00 ] },
checkout: [ { by: "joe", date: ISODate("2012-10-15") } ]
}
我还能原子地做这个操作吗?如果是这样,怎么样?
答案 0 :(得分:4)
由于子文档基本上只是主文档中的字段,因此对它们的任何更新都是原子的。
MongoDB具有每个文档的事务,并且适用于整个文档,包括其子文档。
应该注意的是,findAndModify
不仅仅是原子的。对单个文档的任何操作,无论是update()
还是remove()
都是原子的。