1
在mongodb手册中,有一个用于在单个文档上进行原子操作的example。findAndModify对嵌入文档的原子性
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") } ]
}
我仍然可以做原子操作吗?如果是这样,怎么样?
非常感谢。调用find(_id)然后update(_id,newvalue)和调用findandmodify(_id,newvalue)之间的区别在于可以在find()和update()调用之间更新文档。但是使用findAndModify,在findAndModify执行完成之前,不能对文档进行其他读/写操作。我对么?我想这就是为什么选择这个例子?再次感谢,这真的有帮助。 –
@AntonAnsgar确实可能会有干扰,但是如果您使用查找条件调用update,那么它是原子的,与findandmodify一样 – Sammaye