Java MongoDB在原子操作中查找并删除多个文档
我有一个集合,其中定期插入文档,然后按照FIFO方法由多个进程接收 为了加快摄取速度,进程将在一行中加载多个文档。当一个进程获取一个文档时,它将从集合中删除,以避免其他并发进程获取同一个文档 我正在使用MongoOperation.findAllAndRemove(Spring MongoRepository)来实现这一点,但我想知道这是否可以被视为“踏板安全”。我注意到这个方法实际上是先“查找”,然后“删除”所有结果,我不确定这是否可以看作是一个原子操作 与MongoOperation.findAndRemove方法相比,您是否确认MongoOperation.findAndRemove可以安全使用 这是我目前的代码:Java MongoDB在原子操作中查找并删除多个文档,java,mongodb,spring-boot,Java,Mongodb,Spring Boot,我有一个集合,其中定期插入文档,然后按照FIFO方法由多个进程接收 为了加快摄取速度,进程将在一行中加载多个文档。当一个进程获取一个文档时,它将从集合中删除,以避免其他并发进程获取同一个文档 我正在使用MongoOperation.findAllAndRemove(Spring MongoRepository)来实现这一点,但我想知道这是否可以被视为“踏板安全”。我注意到这个方法实际上是先“查找”,然后“删除”所有结果,我不确定这是否可以看作是一个原子操作 与MongoOperation.fin
public List<IncomingMessage> findIncomingMessagesByProviderOrderByDateAsc(String provider, int limit) {
Query query = new Query();
query.addCriteria(Criteria.where("providerName").is(provider));
query.with(new Sort(Sort.Direction.ASC, "date"));
query.limit(limit);
return mongoOperations.findAllAndRemove(query, IncomingMessage.class);
}
public List findIncomingMessagesByProviderOrderByDateAsc(字符串提供程序,整数限制){
查询=新查询();
query.addCriteria(Criteria.where(“providerName”)。是(provider));
query.with(新排序(Sort.Direction.ASC,“date”);
查询.限额(limit);
返回mongoperations.findAllAndRemove(查询,IncomingMessage.class);
}
当然不是原子事务,但您可以尝试多文档事务。