MongoDB에서 배열 타입 필드의 특정 값을 제거하려면 delete() 연산자를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 배열 내부 객체의 필드를 삭제하는 방법을 단계별로 살펴보겠습니다.
1. 컬렉션 생성 및 문서 삽입
먼저 insertOne() 메서드를 사용해 배열 필드를 포함한 문서를 컬렉션에 삽입합니다.
> db.demo464.insertOne(
... {
...
... "id" : "101",
... "details": [
... {
... Name:"Chris"
... },
... {
... Name:"David"
... }
... ]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e7f8832cb66ccba22cc9dda")
}
2. 문서 조회하기
find() 메서드를 사용하여 컬렉션의 모든 문서를 확인합니다.
> db.demo464.find();
위 쿼리는 다음과 같은 결과를 출력합니다.
{ "_id" : ObjectId("5e7f8832cb66ccba22cc9dda"), "id" : "101", "details" : [ { "Name" : "Chris" }, { "Name" : "David" } ] }3. 배열 타입 필드 값 제외하기
다음은 forEach()와 delete()를 조합하여 배열 타입 필드의 값을 제거하는 쿼리입니다.
> db.demo464.find({id: "101"}).forEach(function(mongoDocument) {
...
... var details = mongoDocument.details;
... for(var j = 0; j < details.length; ++j) {
... var array = details[j];
... delete (array["Name"]);
...
... }
... db.demo464.save(mongoDocument);
... });이 쿼리는 id가 "101"인 문서를 먼저 찾은 뒤, details 배열의 각 요소를 순회하면서 Name 필드를 삭제하고, 마지막으로 save() 메서드로 변경된 문서를 다시 저장하는 방식으로 동작합니다.
4. 최종 결과 확인
변경 사항이 적용되었는지 확인하기 위해 다시 find() 메서드로 모든 문서를 조회합니다.
> db.demo464.find();
실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e7f8832cb66ccba22cc9dda"), "id" : "101", "details" : [ { }, { } ] }출력 결과에서 확인할 수 있듯이 details 배열 내 각 객체의 Name 필드가 성공적으로 제거되어 빈 객체만 남게 됩니다. 이처럼 forEach()로 문서를 순회한 후 delete()로 원하는 필드를 제거하고 save()로 저장하면, 배열 타입 필드의 값을 손쉽게 제외할 수 있습니다.