我一直在編寫代碼將信用從一個用戶轉移到另一個用戶,我選擇MongoDB作爲數據庫。但我被告知我在transferCredits函數中有與數據庫相關的問題。我一直在尋找,但找不到任何問題。查找與數據庫相關的問題
function transferCredits(from, to, amt) {
var fromAccount = db.game_accounts.findOne({"name": from},{"credits": 1});
var toAccount = db.game_accounts.findOne({"name": to},{"credits": 1});
if (fromAccount.credits < amt) {
throw new BalanceError("not enough balance to transfer credits");
}
db.game_accounts.update({name: from}, {$set: {credits: fromAccount.credits - amt}});
db.game_accounts.update({name: to}, {$set: {credits: toAccount.credits + amt}});
}
db.game_accounts.insert({name: "John", credits: 1000});
db.game_accounts.insert({name: "Jane", credits: 1000});
// John transfers credits to Jane
transferCredits("John", "Jane", 100);
無論誰告訴你可能更具體,只是說「事務」通常需要確保多個寫操作之間的一致性。儘管他們推斷「數據庫」(MongoDB)由於缺乏對交易的支持而無法處理這樣的流程,但他們的具體語言卻是由於不明身份的人所引發的那種偏見的廢話。你的「實現」有這樣的失敗,但是在不同的建模模式下很有可能在MongoDB上有這樣的「借/貸」平衡交易。你只是做不同的事情。 –