반응형
다수의 도큐먼트를 insert 할때 1개씩 넣어주는것보다 한번에 여러개를 넣어주는것이 효율적이다.
100개의 도큐먼트가 있다고 가정할때 100번의 네트워크 비용보다 1번의 네트워크 비용이 저렴하기 때문이다
MongoDB에는 다수의 Document를 한번에 저장할 수 있는 insertMany 라는 기능을 지원한다.
Spring-data-mongo 에서는 insertMany 를이용하여 여러개의 Document를 한번에 저장할 수 있는 saveAll 이라는 Method 를 제공한다.
아래는 saveAll 메소드의 구현내용이다.
내용을 본다면 전부 새로운 Document 여야 saveAll 기능을 효과적으로 이용할 수 있다는 것을 확인할 수 있다.
주의하도록 하자!
public <S extends T> List<S> saveAll(Iterable<S> entities) {
Assert.notNull(entities, "The given Iterable of entities not be null!");
Streamable<S> source = Streamable.of(entities);
boolean allNew = source.stream().allMatch(entityInformation::isNew);
if (allNew) {
List<S> result = source.stream().collect(Collectors.toList());
return new ArrayList<>(mongoOperations.insert(result, entityInformation.getCollectionName()));
}
return source.stream().map(this::save).collect(Collectors.toList());
}
사용방법은 굉장히 간단하다.
아래와 같이 사용하면 된다.
@Document
data class User(
@Id
val id: ObjectId? = null,
val name: String,
)
interface UserRepository : MongoRepository<User, ObjectId>
val users = listOf(
User(name = "test1"),
User(name = "test2"),
User(name = "test3"),
)
userRepository.saveAll(users)
반응형
'개발 > Spring' 카테고리의 다른 글
nested objectId serialize, deserialize 했을 때 값이 달라지는 이슈 해결하기 (0) | 2022.04.23 |
---|---|
[Spring Batch] Chunk 기반의 Job 은 어떤 기준으로 작업을 끝낼까 ? (0) | 2021.12.29 |
[Spring] Kotlin 을 이용하여 MongoDB Query를 Type-safe 하게 작성하기 (0) | 2021.07.30 |
[Spring] Interceptor postHandle이 동작을 안해요. (1) | 2021.07.02 |
[ReactiveCrudRepository] 데이터 삭제가 안되는 이슈 (0) | 2021.05.07 |
댓글