Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 이미 생성된 문서에 새 필드 추가하기 – $addToSet 쿼리 활용법

MongoDB에서 $addToSet 연산자를 사용하면 이미 생성된 문서에 새로운 필드를 손쉽게 추가할 수 있습니다. 이 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.

1단계: 샘플 컬렉션 생성

먼저 문서가 포함된 컬렉션을 만들어 보겠습니다.

> db.createFieldDemo.insertOne({"StudentFirstName":"John","StudentAge":21});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd99e28b50a6c6dd317ad95")
}
> db.createFieldDemo.insertOne({"StudentFirstName":"Larry","StudentAge":23});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd99e2fb50a6c6dd317ad96")
}
> db.createFieldDemo.insertOne({"StudentFirstName":"Chris","StudentAge":22});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd99e38b50a6c6dd317ad97")
}
> db.createFieldDemo.insertOne({"StudentFirstName":"David","StudentAge":25});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd99e43b50a6c6dd317ad98")
}

2단계: find() 메서드로 전체 문서 조회

다음은 find() 메서드를 사용하여 컬렉션의 모든 문서를 조회하는 쿼리입니다.

> db.createFieldDemo.find().pretty();

이 쿼리는 다음과 같은 결과를 출력합니다.

{
   "_id" : ObjectId("5cd99e28b50a6c6dd317ad95"),
   "StudentFirstName" : "John",
   "StudentAge" : 21
}
{
   "_id" : ObjectId("5cd99e2fb50a6c6dd317ad96"),
   "StudentFirstName" : "Larry",
   "StudentAge" : 23
}
{
   "_id" : ObjectId("5cd99e38b50a6c6dd317ad97"),
   "StudentFirstName" : "Chris",
   "StudentAge" : 22
}
{
   "_id" : ObjectId("5cd99e43b50a6c6dd317ad98"),
   "StudentFirstName" : "David",
   "StudentAge" : 25
}

3단계: $addToSet으로 새 필드 생성

이제 새 필드를 생성하는 쿼리를 실행해 보겠습니다. 여기서는 특정 문서에 "StudentLastName"이라는 필드를 추가합니다.

> db.createFieldDemo.update({_id: ObjectId("5cd99e43b50a6c6dd317ad98")}, {$addToSet: {"StudentLastName": "Miller"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

4단계: 업데이트 결과 확인

업데이트가 정상적으로 적용되었는지 컬렉션의 모든 문서를 다시 조회해 보겠습니다.

> db.createFieldDemo.find().pretty();

실행 결과는 다음과 같습니다.

{
   "_id" : ObjectId("5cd99e28b50a6c6dd317ad95"),
   "StudentFirstName" : "John",
   "StudentAge" : 21
}
{
   "_id" : ObjectId("5cd99e2fb50a6c6dd317ad96"),
   "StudentFirstName" : "Larry",
   "StudentAge" : 23
}
{
   "_id" : ObjectId("5cd99e38b50a6c6dd317ad97"),
   "StudentFirstName" : "Chris",
   "StudentAge" : 22
}
{
   "_id" : ObjectId("5cd99e43b50a6c6dd317ad98"),
   "StudentFirstName" : "David",
   "StudentAge" : 25,
   "StudentLastName" : [
      "Miller"
   ]
}

참고 사항

위 출력 결과에서 알 수 있듯이, $addToSet은 값을 배열 형태로 저장합니다. 즉, "StudentLastName" 필드는 문자열이 아닌 ["Miller"]라는 배열로 생성됩니다. 배열이 아닌 일반 스칼라 값(문자열 등)으로 필드를 추가하고 싶다면 $set 연산자를 사용하는 것이 좋습니다. 또한 $addToSet은 동일한 값이 이미 배열에 존재하면 중복 추가하지 않는다는 특징이 있어, 고유한 값 목록을 관리할 때 유용합니다.