반응형
mongoose를 사용해서 마이그레이션 스크립트를 작성하던중 더이상 사용하지 않는 필드를 완전히 DB에서 삭제해야 하는 상황이 생겼다.
해당 필드를 DB에서 제거해보자.
Version
node.js: 16.15.1
mongoose: 6.6.2
mongoDB: 5.x
Field 삭제
예를 들어 기존에 존재하던 스키마는 아래와 같은 형식이였다.
const testSchema = new Schema({
test1: { type: String, required: true },
test2: { type: String, required: true },
test3: { type: String, required: true },
test4: { type: String, required: true },
test5: { type: String, required: true },
});
하지만 스키마가 변경되면서 아래와 같은 형식으로 변경되었다.
const testSchema = new Schema({
test2: { type: String, required: true },
test3: { type: String, required: true },
test4: { type: String, required: true },
test5: { type: String, required: true },
});
이 때 DB에서 test1 필드를 영구적으로 삭제해보자.
아래 코드를 통해서 할 수 있다.
const removeTest1 = await Test.updateMany({}, { $unset: { test1: 1 } }, { strict: false });
위 코드는 test1이란 필드를 DB에서 완전 삭제한다.
이 때 mongoose를 사용해서 삭제하려면 뒤에 option에 strict: false를 붙여야 한다.
만약 붙이지 않는다면 아무 동작을 하지 않는데, 스키마에 정의가 되어있지 않은 필드를 삭제할 때 { strict: false } 가 없으면 아무동작을 하지않기 때문이다.
반응형
'DataBase > MongoDB' 카테고리의 다른 글
[MongoDB] MongoDB 검색 성능 극대화 방법: 인덱스와 컴파운드 인덱스의 활용 (0) | 2023.06.13 |
---|---|
[MongoDB] mongodb에서 필드의 이름을 변경하는 방법 (0) | 2023.03.17 |
[MongoDB] The value of "offset" is out of range. It must be >= 0 && <= 17825792 (0) | 2022.11.14 |
[Error] MongoServerError: ns not found (0) | 2022.11.08 |
[Mongoose] mongoose 에서 statics method와 instance method의 차이점 (0) | 2022.07.14 |