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