【发布时间】:2015-12-02 23:02:53
【问题描述】:
看完这篇文章我有一些问题:Perform Two Phase Commits on Mongodb
问题1:在帖子中,它旨在提供一个反向交易的示例。我的问题是实际代码是什么样的?它只是像这样将所有功能组合在一起吗?如果没有,那我就整理一下帖子里的所有代码
var t = db.transactions.findOne( { state: "initial" } )
db.transactions.update(
{ _id: t._id, state: "initial" },
{
$set: { state: "pending" },
$currentDate: { lastModified: true }
}
)
db.accounts.update(
{ _id: t.source, pendingTransactions: { $ne: t._id } },
{ $inc: { balance: -t.value }, $push: { pendingTransactions: t._id } }
)
db.accounts.update(
{ _id: t.destination, pendingTransactions: { $ne: t._id } },
{ $inc: { balance: t.value }, $push: { pendingTransactions: t._id } }
)
db.transactions.update(
{ _id: t._id, state: "pending" },
{
$set: { state: "applied" },
$currentDate: { lastModified: true }
}
)
db.accounts.update(
{ _id: t.source, pendingTransactions: t._id },
{ $pull: { pendingTransactions: t._id } }
)
db.accounts.update(
{ _id: t.destination, pendingTransactions: t._id },
{ $pull: { pendingTransactions: t._id } }
)
db.transactions.update(
{ _id: t._id, state: "applied" },
{
$set: { state: "done" },
$currentDate: { lastModified: true }
}
)
问题2:既然mongodb保证在处理单个文档时它的操作是原子的,那么我是否可以将上述所有块包装成promise并将它们链接在一起,因为每个块只修改一个文档。
【问题讨论】:
标签: mongodb asynchronous promise atomic