Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MongoDB在原子操作中查找并删除多个文档_Java_Mongodb_Spring Boot - Fatal编程技术网

Java MongoDB在原子操作中查找并删除多个文档

Java MongoDB在原子操作中查找并删除多个文档,java,mongodb,spring-boot,Java,Mongodb,Spring Boot,我有一个集合,其中定期插入文档,然后按照FIFO方法由多个进程接收 为了加快摄取速度,进程将在一行中加载多个文档。当一个进程获取一个文档时,它将从集合中删除,以避免其他并发进程获取同一个文档 我正在使用MongoOperation.findAllAndRemove(Spring MongoRepository)来实现这一点,但我想知道这是否可以被视为“踏板安全”。我注意到这个方法实际上是先“查找”,然后“删除”所有结果,我不确定这是否可以看作是一个原子操作 与MongoOperation.fin

我有一个集合,其中定期插入文档,然后按照FIFO方法由多个进程接收

为了加快摄取速度,进程将在一行中加载多个文档。当一个进程获取一个文档时,它将从集合中删除,以避免其他并发进程获取同一个文档

我正在使用MongoOperation.findAllAndRemove(Spring MongoRepository)来实现这一点,但我想知道这是否可以被视为“踏板安全”。我注意到这个方法实际上是先“查找”,然后“删除”所有结果,我不确定这是否可以看作是一个原子操作

与MongoOperation.findAndRemove方法相比,您是否确认MongoOperation.findAndRemove可以安全使用

这是我目前的代码:

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);
}

当然不是原子事务,但您可以尝试多文档事务。