$set 연산자로 필드 추가하기
기존 MongoDB 문서에 특정 데이터 유형(목록, 객체)을 가진 필드를 추가할 때는 $set 연산자를 사용하면 됩니다. 먼저 예제용 컬렉션에 문서를 생성해 보겠습니다.
> db.demo732.insertOne({_id:1,Language:"English"});
{ "acknowledged" : true, "insertedId" : 1 }
> db.demo732.insertOne({_id:2,Language:"Hindi"});
{ "acknowledged" : true, "insertedId" : 2 }
컬렉션의 모든 문서 조회
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo732.find();
위 명령을 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : 1, "Language" : "English" }
{ "_id" : 2, "Language" : "Hindi" }
객체 및 배열 타입 필드 추가 쿼리
다음은 기존 MongoDB 문서에 객체(object) 타입의 details 필드와 배열(list) 타입의 studentDetails 필드를 한 번에 추가하는 쿼리입니다.
> db.demo732.update({_id:1},
... { $set:{details:{'subjectName':"MongoDB"}, studentDetails:[{Name:"David"},{CountryName:"US"}]}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
업데이트가 완료되었으므로, 다시 find() 메서드로 전체 문서를 조회해 보겠습니다.
> db.demo732.find();
실행 결과는 다음과 같습니다.
{ "_id" : 1, "Language" : "English", "details" : { "subjectName" : "MongoDB" }, "studentDetails" : [ { "Name" : "David" }, { "CountryName" : "US" } ] }
{ "_id" : 2, "Language" : "Hindi" }
_id가 1인 문서에만 새로운 필드들이 정상적으로 추가되고, 나머지 문서는 그대로 유지되는 것을 확인할 수 있습니다.
핵심 정리
$set은 지정한 필드가 문서에 없으면 새로 생성하고, 이미 존재하면 해당 값을 갱신합니다.- 값 자리에 중괄호
{}를 사용하면 객체(내장 문서) 타입 필드가, 대괄호[]를 사용하면 배열(목록) 타입 필드가 추가됩니다. - 여러 필드를 하나의
$set안에 동시에 지정할 수 있어, 한 번의 업데이트로 여러 필드를 추가할 수 있습니다. - 참고로 최신 MongoDB 버전에서는
update()대신updateOne()또는updateMany()메서드 사용이 권장됩니다.