2014-10-17 158 views
1

我正在處理一個問題,即用戶可以在指定的時間限制內更新文檔,如果他沒有,服務器將會。在Meteor處理併發請求

更新涉及遞增值並將對象添加到文檔數組。我需要確保只有一個用戶/服務器更新文檔。不是都。

爲確保發生這種情況,將運行一些檢查以查看文檔是否已更新,但有時候用戶和服務器在同一時間運行,並通過檢查,然後文檔被更新兩次。

我一直在嘗試很多不同的方法來解決這個問題,但我一直都沒有辦法。我嘗試實現類似於此的鎖定:http://en.wikipedia.org/wiki/Peterson%27s_algorithm以確保只有一個更新會發生,第二個更新將失敗,但我沒有成功。有任何想法嗎?

+0

可否請您提供您當前的代碼,以便我們可以在此基礎上進行構建? – 2014-10-17 14:13:25

+0

你可能想看看支持hook的更新的collection2包。但是,這將有助於看到你現在是如何做的,所以答案可以更適合你的情況。 – mark 2014-10-17 16:31:09

回答

1

爲確保發生這種情況,將運行一些檢查以查看文檔是否已更新,但有時候用戶和服務器在同一時間運行,並且都通過檢查,然後文檔是更新兩次。

您可以通過使用MongoDB更新查詢來實現此目的,該查詢同時檢查值是否已更新並更新它。就像這樣:

var post = Posts.findOne("ID"); 
// ... do some stuff with the post ... 
Posts.update({counter: post.counter}, {$push: {items: newItem}, $inc: {counter: 1}}); 

正如你所看到的,在一個查詢中,我們都檢查了櫃檯並增加它 - 因此,如果兩個這些查詢的運行後,另一隻一個正確的,實際上會更新該文件(因爲計數器韓元不再匹配)。

+0

哇。很簡單。這可能會做到 – 2014-10-18 16:20:50