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

时间:2017-04-04 12:09:24

标签: mongodb database

我的一个应用程序使用Mongo作为其主要数据库,它工作正常并适合我的数据。

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

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

使用PostgreSQL或MySQL时,它总是很好用,但我听说很多MongoDB不可靠,因为它会将插入分段实际执行起来。

我应该担心我的情况吗?

1 个答案:

答案 0 :(得分:0)

您可以使用db.collection.findAndModify()来确保极高的原子性。像下面的东西。这将确保您正在处理已标记为已完成的文档,而其他任何进程都无法获取该文档。

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

参考文档here