2017-06-19 46 views
1

下面是我收集的模式:如何從MongoDB集合中創建並行和順序的作業隊列(FIFO)?

var mongoose = require('mongoose'); 

var urlSchema = new mongoose.Schema({ 
    url: String, 
    easeDate: { type: Date, index: 1}, 
    created: { type: Date, default: Date.now } 
}); 

我需要做的最早的文件(由easeDate)的更新行動來改變其easeDate日期«現在+一些超時»並得到受影響的文檔。是否可以在一個請求中?

基本上,我想從集合中創建一個類似隊列的東西(「最老的」一個是下一個,即先進先出)。刪除網址(收藏中的文件)是由其他條件完成的。我不想從隊列中刪除,但通過更新easeDate來結束它。

最後,我想獲取可用的網址併爲其設置超時時間,以便下一次返回下一個網址。如果這是最後一個網址,則由於超時,下次返回null

如果我可以更新它,那麼我該如何查詢數據庫(貓鼬)來獲取下一個網址easeDate < Date.now()?你能舉一個JavaScript例子嗎?

+0

重複引用是錯誤的!我更新了這個問題。 – Ruslan

回答

1

使用findAndModify()的排序

如果你從一臺機器你可以這樣做,用findAndRemove訪問你的籌碼

Model.collection.findAndModify({query:{}, sort:{created: 1}, remove:true}) 

您需要訪問collection因爲mongoose不實施

findAndModify你有findOneAndUpdate個但它不會刪除文檔

的更多信息:

Does Mongoose support the Mongodb `findAndModify` method?

+0

排序實際上也由['.findOneAndRemove()'](http://mongoosejs.com/docs/api.html#model_Model.findOneAndRemove)貓鼬方法支持。所以你並不需要深入挖掘底層驅動。 –

+0

我想,'.findOneAndUpdate()'是我最好的情況(我更新了問題)。如何查詢隊列中的下一個可用文檔? – Ruslan

相關問題