MongoDB 컬렉션의 모든 문서에 새 필드 추가하기
MongoDB 컬렉션에 있는 모든 문서에 새로운 필드를 추가하려면 $set 연산자를 사용하면 됩니다. 기본 문법은 다음과 같습니다.
db.yourCollectionName.update({}, { $set: {"yourFieldName": yourValue} }, false, true);여기서 첫 번째 인수인 빈 객체({})는 별도의 조건 없이 모든 문서를 대상으로 한다는 의미입니다. 세 번째 인수는 upsert 여부, 네 번째 인수는 다중 문서 업데이트(multi) 여부를 나타내며, multi를 true로 설정해야만 컬렉션 전체 문서가 한 번에 업데이트됩니다.
참고로 최신 버전의 MongoDB에서는 위 방식보다 updateMany() 메서드를 사용하는 것이 권장됩니다.
db.yourCollectionName.updateMany({}, { $set: {"yourFieldName": yourValue} });예제용 컬렉션 생성
문법을 이해하기 위해 몇 개의 문서를 포함한 컬렉션을 먼저 만들어 보겠습니다. 컬렉션 생성 쿼리는 다음과 같습니다.
>db.addNewFieldToEveryDocument.insertOne({"StudentName":"John","StudentAddress":"US"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c6efc0b6fd07954a48906ae")
}
>db.addNewFieldToEveryDocument.insertOne({"StudentName":"David","StudentAddress":"UK"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c6efc0b6fd07954a48906af")
}
>db.addNewFieldToEveryDocument.insertOne({"StudentName":"Carol","StudentAddress":"UK"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c6efc0b6fd07954a48906b0")
}
>db.addNewFieldToEveryDocument.insertOne({"StudentName":"Bob","StudentAddress":"US"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c6efc0b6fd07954a48906b1")
}컬렉션의 모든 문서 조회하기
find() 메서드를 사용하면 컬렉션의 모든 문서를 확인할 수 있습니다.
> db.addNewFieldToEveryDocument.find().pretty();
위 쿼리의 실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5c6efc0b6fd07954a48906ae"),
"StudentName" : "John",
"StudentAddress" : "US"
}
{
"_id" : ObjectId("5c6efc0b6fd07954a48906af"),
"StudentName" : "David",
"StudentAddress" : "UK"
}
{
"_id" : ObjectId("5c6efc0b6fd07954a48906b0"),
"StudentName" : "Carol",
"StudentAddress" : "UK"
}
{
"_id" : ObjectId("5c6efc0b6fd07954a48906b1"),
"StudentName" : "Bob",
"StudentAddress" : "US"
}모든 문서에 새 필드 추가하기
이제 컬렉션의 모든 문서에 새로운 필드를 추가하는 쿼리를 실행해 보겠습니다.
> db.addNewFieldToEveryDocument.update({}, { $set: {"StudentAge": 24} }, false, true);
WriteResult({ "nMatched" : 4, "nUpserted" : 0, "nModified" : 4 })실행 결과를 보면 4개의 문서가 모두 매칭되고(nMatched: 4), 4개의 문서가 수정되었습니다(nModified: 4). 즉, 모든 문서에 "StudentAge": 24라는 새 필드가 성공적으로 추가된 것입니다.
업데이트 결과 확인하기
새 필드가 모든 문서에 정상적으로 추가되었는지 다시 한번 확인해 보겠습니다.
> db.addNewFieldToEveryDocument.find().pretty();
실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5c6efc0b6fd07954a48906ae"),
"StudentName" : "John",
"StudentAddress" : "US",
"StudentAge" : 24
}
{
"_id" : ObjectId("5c6efc0b6fd07954a48906af"),
"StudentName" : "David",
"StudentAddress" : "UK",
"StudentAge" : 24
}
{
"_id" : ObjectId("5c6efc0b6fd07954a48906b0"),
"StudentName" : "Carol",
"StudentAddress" : "UK",
"StudentAge" : 24
}
{
"_id" : ObjectId("5c6efc0b6fd07954a48906b1"),
"StudentName" : "Bob",
"StudentAddress" : "US",
"StudentAge" : 24
}위 출력 결과에서 확인할 수 있듯이, 컬렉션의 모든 문서에 "StudentAge": 24 필드가 성공적으로 추가되었습니다. 이처럼 빈 조건 객체와 multi: true 옵션(또는 updateMany())을 함께 사용하면 컬렉션 전체 문서에 손쉽게 새 필드를 추가할 수 있습니다.