我可以信任MongoDB集合作为任务队列吗?

我可以信任MongoDB集合作为任务队列吗?,mongodb,database,Mongodb,Database,我有一个应用程序使用Mongo作为其主要数据库,它运行良好,适合我的数据 现在我需要向应用程序添加另一个进程,它将在后台处理任务 不应该发生的是同一个任务执行两次。 这意味着:当再次查询数据库中的任务时,即使在0.0001毫秒前它们被标记为已完成,但在它们被标记为已完成之后,我希望确保状态是正确的 在使用PostgreSQL或MySQL时,它对我来说总是很好,但我听说MongoDB不可靠,因为它会将插入分段,以便稍后实际执行 我应该为我的情况担心吗?您可以使用db.collection.find

我有一个应用程序使用Mongo作为其主要数据库,它运行良好,适合我的数据

现在我需要向应用程序添加另一个进程,它将在后台处理任务

不应该发生的是同一个任务执行两次。 这意味着:当再次查询数据库中的任务时,即使在0.0001毫秒前它们被标记为已完成,但在它们被标记为已完成之后,我希望确保状态是正确的

在使用PostgreSQL或MySQL时,它对我来说总是很好,但我听说MongoDB不可靠,因为它会将插入分段,以便稍后实际执行

我应该为我的情况担心吗?

您可以使用db.collection.findAndModify,这将确保非常高的原子性。像下面这样。这将确保您正在处理已标记为已完成的文档,并且没有其他进程可以获取该文档

db.car.findAndModify({
  query: { task : 'new' },
  sort: { _id : 1 },
  update: { $set: { task: 'done'} }
});

请参阅文档

假设只有一个进程可以处理集合,我可以在没有findAndModify的情况下完成它吗?我的ORM不支持它,我宁愿让我的代码保持一致。你在用什么ORM?我在变更日志中看到。