Java MongoDB一次保存多个文档

问题描述 投票:2回答:4

我有一个更新的对象/文档列表,我需要一次保存列表中的所有对象。

我在MongoTemplate中看到了save(),但它一次只能获取单个文档。有没有办法一次保存多个文件或我需要调用保存循环?

mongodb spring-data-mongodb mongo-java mongo-java-driver mongotemplate
4个回答
2
投票

谢谢你的帮助。

我能够使用Spring数据MongoDB来完成它。 Spring数据MongoDB的MongoRepository有许多内置方法。

org.springframework.data.mongodb.repository.MongoRepository.saveAll(Iterable entites)是我用来保存多个文档的那个。


1
投票

使用Spring,您可以轻松地一次存储多个文档。

接口已经可以使用saveAll方法和详细信息,如下所示:

@NoRepositoryBean
public interface MongoRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {

    /*
     * (non-Javadoc)
     * @see org.springframework.data.repository.CrudRepository#saveAll(java.lang.Iterable)
     */
    @Override
    <S extends T> List<S> saveAll(Iterable<S> entites);
//...
}

Spring用法示例:

@Component
public class Processor {

@Autowired
public Processor(Repository repository) {
    this.repository= repository;
}

public void save(Iterable<ProductEntity> entites) {
    List<ProductEntity> saved = repository.saveAll(entites);
    logger.info("Saved {} entities", saved.size());
}

}

您的存储库界面:

//https://docs.spring.io/spring-data/mongodb/docs/1.2.0.RELEASE/reference/html/mongo.repositories.html
public interface Repository extends MongoRepository<ProductEntity, String> {   
}

使用“产品实体”的“列表”调用保存方法


0
投票

这是一种方法。

mongoTemplate.getCollection("your_collection_name").insert(List<Documents>)

您可能还想查看BulkWriteOperation课程。


0
投票

对于插入:

您应该使用InsertMany函数:

List<Document> docList = new List<Document>();
docList.add(doc1); // assuming that doc1 and doc2 are defined
docList.add(doc2);
yourMongoDb.getCollection("your_collection").insertMany(docList);

对于Upsert(你需要什么):

UpdateOptions options = new UpdateOptions().upsert(true) ;
yourCollectionOfDocuments.forEach( doc ->{ 
    Document filter = Filters.eq("_id", doc.get("id"));
    yourDb.getCollection("your_collection").updateOne(filter,update,option); 
})
© www.soinside.com 2019 - 2024. All rights reserved.