db["comments"].updateMany({},{$rename: {"likeCount" : "loveCount"} })
JavaScript
복사
배열 내부 객체 필드 교체시
오류 메시지를 보면, MongoDB가 배열 내의 객체 필드에 바로 접근하여 필드명을 수정하는 것을 허용하지 않기 때문에 발생한 문제입니다. usageInfo는 배열이고, 배열의 요소들에 들어 있는 useAmount와 useDate 필드들을 개별적으로 수정해야 하기 때문에 단순한 $rename으로는 불가능합니다.
MongoDB에서 배열 안의 개별 객체 필드명을 변경하려면, 다음과 같은 방식으로 수작업으로 업데이트하거나, 스크립트를 작성하여 처리해야 합니다. 필드명 변경 작업을 위해 $rename 대신 $set과 $map을 사용하여 수동으로 업데이트하는 방법이 필요합니다.
1. 개별적으로 배열 필드 수정 (Aggregation 사용)
$map을 사용하여 배열 내 객체 필드 이름을 수정할 수 있습니다. 이렇게 하면 배열 내 객체의 필드명을 일괄적으로 업데이트할 수 있습니다.
다음은 usageInfo 배열 안의 useAmount를 usedCouponCount, useDate를 usedCouponDate로 변경하는 예시입니다.
db.business_coupons.updateMany(
{},
[
{
$set: {
usageInfo: {
$map: {
input: "$usageInfo",
as: "item",
in: {
usedCouponCount: "$$item.useAmount",
usedCouponDate: "$$item.useDate"
}
}
}
}
}
]
)
JavaScript
복사
2. 설명
•
$map: 배열 내의 각 항목에 대해 변환을 적용할 수 있습니다.
◦
input: 수정하려는 배열, 즉 usageInfo.
◦
as: 배열의 각 요소를 나타내는 변수로, 여기서는 item.
◦
in: 변환 로직으로, 여기서 기존의 useAmount는 usedCouponCount로, useDate는 usedCouponDate로 이름이 변경됩니다.
이 스크립트는 usageInfo 배열 내의 각 객체에서 useAmount와 useDate 필드를 각각 usedCouponCount와 usedCouponDate로 변경합니다.
3. 테스트 및 검증
업데이트가 완료되면, 데이터가 올바르게 변경되었는지 MongoDB에서 확인합니다.