2017-03-21 52 views
0

我正在開發一個任務查詢。當請求的任務,我回到最古老的一個用下面的代碼:貓鼬更新文件在找到它的時刻

Task.find({}) 
     // Filter for those that are not started yet 
     .where('startDate').equals(null) 
     // Sort ascending to get the oldest 
     .sort({ reqDate: 'asc' }).findOne(function (err, task) { ... } 

進入最後括號的,我設置了的startDate到當前的時間。 通過調用一個運行express的NodeJS(Express)API並使用Mongoose與MongoDB進行通信來完成請求。

這隻適用於一個人請求任務,但我現在正在考慮一個巨大的規模。如果有多個人在同一時間請求,所有接收相同的任務,因爲他們在幾毫秒的相同時間內進入?

有沒有辦法確保文件的startDate在被貓鼬發現的那一刻被設置?

回答

2

在蒙戈有db.collection.findAndModify()db.collection.findOneAndUpdate()

但你很可能得到競爭條件反正。你可能會更好實施與Redis的,RabbitMQ的,ZeroMQ,ActiveMQ的,NSQ等

看到你的隊列:

更多的工具在這裏:

概括起來,你可能能夠解決當前的問題,db.collection.findAndModify()db.collection.findOneAndUpdate()但使用隊列或酒吧一個合適的工具/ sub會爲您節省很多麻煩,尤其是當您開始同時處理多個任務時。

+0

謝謝,正是我需要的。將明確地看看你的建議。 – Marv