Model.prototype.save(), Model.create(), Model.insertMany(), Model.bulkWrite(), Model.bulkSave
Create관련
Mongoose : Model.prototype.save(), Model.create(), Model.insertMany(), Model.bulkWrite(), Model.bulkSave
1. Model.prototype.save()
document.isNew가 true인 경우 데이터베이스에 새 문서를 삽입하여 이 문서를 저장한다.
isNew가 false인 경우 수정된 경로만 포함하는 updateOne 작업을 보낸다.
2. Model.create()
하나 이상의 문서를 데이터베이스에 저장하기 위한 바로 가기이다.
MyModel.create(docs)는 docs의 모든 문서에 대해 new MyModel(doc).save()를 수행한다.
예시코드)
// 하나의 새로운 Model의 문서 삽입
await Model.create({ name: '홍길동' });
// 여러개의 새로운 `Character` 문서 삽입
await Model.create([{ name: '장보고' }, { name: '임꺽정' }]);
// 트랜잭션 내에 새 문자를 만듭니다. 반드시해야 한다.
// 원한다면 배열을 'create☆'의 첫 번째 매개 변수로 전달한다.
// 옵션을 지정한다.
await Model.create([{ name: '홍길동' }], { session });
3. Model.insertMany()
문서 배열의 유효성을 검사하고 모두 유효한 경우 MongoDB에 삽입하는 바로 가기이다.
이 함수는 각 문서에 대해 하나가 아니라 서버에 하나의 작업만 보내기 때문에 .create()보다 빠르다.
Mongoose는 insertMany를 MongoDB로 보내기 전에 항상 각 문서의 유효성을 검사한다.
따라서 하나의 문서에 유효성 검사 오류가 있는 경우 order 옵션을 false로 설정하지 않는 한 문서가 저장되지 않는다.
4. Model.bulkWrite()
여러 insertOne, updateOne, updateMany, replaceOne, deleteOne 또는 deleteMany 작업을 하나의 명령으로 MongoDB 서버에 보낸다.
이것은 여러 독립 작업(예: create()를 사용하는 경우)을 보내는 것보다 빠르다.
왜냐하면 bulkWrite()를 사용하면 MongoDB로의 왕복이 한 번만 있기 때문이다.
Model.bulkWrite([
{
insertOne: {
document: {
name: '홍길동',
title: '홍길동전'
}
}
},
{
updateOne: {
filter: { name: '홍길동' },
update: { title: '의적 홍길동' }
}
},
{
deleteOne: {
filter: { name: '홍길동' }
}
}
]).then(res => {
console.log(res.insertedCount, res.modifiedCount, res.deletedCount);
});
MongoDB 드라이버를 직접 사용했다면 `update: { $set: { title: ... } }`을 수행해야 하지만 mongoose가 $set을 추가한다.
Mongoose는 제공하는 모든 작업에 대해 캐스팅을 수행한다.
이 함수는 save()나 update()와 같은 미들웨어를 트리거하지 않는다.
모든 문서에 대해 save() 미들웨어를 트리거해야 하는 경우 대신 create()를 사용한다.
5. Model.bulkSave
문서 배열을 가져오고 변경 사항을 가져오고 문서가 새 문서인지 또는 변경 사항이 있는지 여부에 따라 데이터베이스에 문서를 삽입/업데이트한다.
차이점
save()를 트리거하는 경우: Model.prototype.save(), Model.create()
save()를 트리거하지 않는 경우: Model.insertMany(), Model.bulkWrite(), Model.bulkSave
1. 일반적인 경우: Model.create() 사용한다.
2. 많은 문서를 넣을때: Model.insertMany() 사용한다.
3. 한 번에 다양한 작업(주로 문서 하나 삽입, 수정, 삭제)를 할때 Model.bulkWrite() 사용한다.
4. 한 번에 다양한 작업(주로 문서 하나 삽입, 수정, 삭제)를 save형식으로 사용하고자 하면 Model.bulkSave 사용한다.
'데이터베이스 > MongoDB' 카테고리의 다른 글
[MongoDB] Update관련, 차이점 (0) | 2023.02.28 |
---|---|
[MongoDB] Deprecated Methods (지원중단 메소드) (0) | 2023.02.28 |
[MongoDB] Create관련, 차이점 (0) | 2023.02.27 |
[Mongoose] Read관련, 차이점 (0) | 2023.02.26 |
[MongoDB] Read관련, 차이점 (0) | 2023.02.26 |
댓글