Java 多个读卡器试图更新mongodb中的同一文档

Java 多个读卡器试图更新mongodb中的同一文档,java,spring,mongodb,Java,Spring,Mongodb,我在mongo的数据库(名称:db)中有一组配置文件(名称:profiles)。每个配置文件都有{id、lastUpdatedAt、createdAt}字段。根据配置文件的lastUpdated字段,可以确定每个配置文件都已过时。如果现在\u在\u毫秒-profile.lastUpdated>30*60*1000(30分钟)中,则配置文件已过时 我有多个工作人员(在不同的机器上运行)试图获取未使用的配置文件,并假设他们拥有。所有工作人员都尝试读取配置文件.All();循环浏览每个配置文件,检查是

我在mongo的数据库(名称:db)中有一组配置文件(名称:profiles)。每个配置文件都有{
id、lastUpdatedAt、createdAt
}字段。根据配置文件的
lastUpdated
字段,可以确定每个配置文件都已过时。如果
现在\u在\u毫秒-profile.lastUpdated>30*60*1000
(30分钟)中,则配置文件已过时

我有多个工作人员(在不同的机器上运行)试图获取未使用的配置文件,并假设他们拥有。所有工作人员都尝试读取
配置文件.All()
;循环浏览每个配置文件,检查是否有过时的配置文件并抓取它。(如果没有可用的配置文件,则创建新的配置文件)。每个活动工作进程每30分钟更新一次LastUpdate(与我在上面检查的窗口相同)

当我尝试此设置时,我看到多个工作人员使用相同的陈旧配置文件。我想这是因为,所有员工都看到相同的陈旧配置文件,并决定重用它,每个人都会得到相同的配置文件名。在mongodb中如何避免这种情况


我是否应该在mongodb中使用事务(不直接支持)。看起来一个文档上的读写器锁定在这里没有帮助。我使用的是spring mongo java。

我不能100%确定您想做什么,或者这是否能解决问题,但请看findAndModify()。它可以更新找到的第一个(过时)文档并将其返回。然后其他工作人员的后续检查将看到其他文档,而不是该文档