如何从MongoDB集合创建并行和顺序作业队列(FIFO)?

时间:2017-06-19 23:01:59

标签: javascript node.js mongodb mongoose mongodb-query

这是我的集合架构:

var mongoose = require('mongoose');

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

我需要使用最早的文档(通过easeDate)执行更新操作,将其easeDate日期更改为«now + some timeout»并获取受影响的文档。是否有可能在一个请求中?

基本上,我想从集合中创建一个类似队列的东西(“最老的”是下一个拉出来的,即先出先后)。删除网址(集合中的文档)由其他条件完成。我不想从队列中删除,而是通过更新easeDate来结束它。

最后,我想获取可用的url并为其设置超时,以便下次返回下一个url时。如果它是最后一个url,则由于超时,下次返回null

如果我可以更新它,我怎样才能查询数据库(mongoose)以获取下一个网址,其中easyDate< Date.now()?你能用JavaScript举个例子吗?

1 个答案:

答案 0 :(得分:1)

使用带有排序

的findAndModify()

如果您从一台计算机访问您的堆栈,您可以使用 findAndRemove

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

您需要访问collection,因为mongoose没有实现

findAndModify您有findOneAndUpdate但它不会删除文件

更多信息:

Does Mongoose support the Mongodb `findAndModify` method?