몽고 DB 에서 개별 필드를 업데이트 하는 것은 간단하다.
$rename 을 사용하거나 $set을 사용하면 된다.
https://docs.mongodb.com/manual/reference/operator/update/rename/index.html
아래 코드는 배열 안에 있는 필드의 이름을 변경하는 코드다.
코드가 변경하는 데이터는 이렇게 생겼다.
await mongoClient.db('project').collection('projects').find({ "projectAttachments.created_at": { "$exists": true } }).forEach(function (doc) {
doc.projectAttachments.forEach(async function (projectAttachment) {
if (projectAttachment.hasOwnProperty("created_at")) { // 배열의 원소들이 해당 property를 가지고 있는가
var bulk = mongoClient.db('project').collection('projects').initializeOrderedBulkOp(); // 벌크 연산 준비
bulk.find({ "_id": doc._id, "projectAttachments.id": projectAttachment.id }).updateOne({
"$set": { "projectAttachments.$.createdAt": projectAttachment.created_at } // 왼쪽 필드 이름 : 바꿀려고 하는 이름 . 오른쪽 필드 이름 : 현재 필드 이름
});
bulk.find({ "_id": doc._id, "projectAttachments.id": projectAttachment.id }).updateOne({
"$unset": { "projectAttachments.$.created_at": 1 } // 기존 필드 제거
});
bulk.execute();
bulk = mongoClient.db('project').collection('projects').initializeOrderedBulkOp();
}
});
});
db에서 배열 아래 필드를 먼저 find 한다
$exists: true 로 있는지 확인한다.
bulk 변수를 선언한다.
bulk.find 를 통해서 bulk연산을 한다.
위쪽에 있는 $set으로 필드 이름을 변경한다.
아래 $unset은 기존 필드를 없앤다.
'JavaScript│Node js' 카테고리의 다른 글
react 앱 firebase 에 배포하기 (0) | 2019.10.16 |
---|---|
마틴 파울러 - 리팩토링 - Encapsulate Variable (0) | 2019.10.05 |
Express js 웹 사이트 배포하는 방법! (0) | 2019.07.28 |
팀즈 Teams 챗봇 개발 요약 (2) | 2019.06.21 |
javascript new Date(null) 값 (0) | 2019.06.13 |
댓글