Java MongoDB сохранить несколько документов одновременно - PullRequest
0 голосов
/ 06 июня 2018

У меня есть список обновленных объектов / документов, которые мне нужно сохранить сразу все объекты в списке.

Я видел save () в MongoTemplate, но он может принимать по одному документу за раз.Есть ли способ сохранить несколько документов одновременно, или мне нужно вызвать сохранить в цикле?

Ответы [ 4 ]

0 голосов
/ 12 сентября 2018

Используя 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 голосов
/ 06 июня 2018

Для вставки:

Вы должны использовать функцию 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); 
})
0 голосов
/ 06 июня 2018

Спасибо за помощь.

Я смог сделать это, используя данные Spring MongoDB.Весенние данные MongoDB MongoRepository имеет много встроенных методов.

org.springframework.data.mongodb.repository.MongoRepository.saveAll (Iterable entites) - это тот, который я использовал для сохранения нескольких документов.

0 голосов
/ 06 июня 2018

Это один из способов сделать.

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

Возможно, вы также захотите проверить класс BulkWriteOperation .

...