Да, это возможно, если вы храните историю в одном документе. MongoDB поддерживает атомарные обновления в рамках документа, но не для нескольких документов в коллекции.
Таким образом, вы можете встроить историю в массив, используя схему примерно так:
{
_id: 12345,
value: "Apple",
history:
[
{ revisionid: 2, value: "Orange" },
{ revisionid: 1, value: "Pear" }
]
}
Например, вы можете вставить новый документ:
db.things.insert( { _id: 123, value: "Apple" } )
Затем обновите его за одну атомарную операцию:
db.things.update( { _id: 123 },
{
$set: { value: "Orange" },
$push : { history : { revisionid: 1, value: "Apple" } }
}
)