Mongoose 스키마 형식 변경
우리는 Mongoose를 사용하는 애플리케이션을 빠르게 개발하고 있으며 스키마가 자주 변경되고 있습니다.기존 문서의 스키마를 업데이트하는 올바른 방법을 찾을 수 없을 것 같습니다. 문서를 날려버리고 처음부터 완전히 다시 만들지 않고는 말입니다.
저는 http://mongoosejs.com/docs/api.html#schema_Schema-add, 을 우연히 발견했는데, 맞는 것 같습니다.MongoDB를 처음 사용하는 사람에게는 이를 실제로 구현하는 방법에 대한 문서가 거의 또는 전혀 없습니다.
사용 가능이라는 새 필드를 추가합니다.스키마 정의는 다음과 같습니다.
var sweepstakesSchema = new Schema({
client_id: {
type: Schema.Types.ObjectId,
ref: 'Client',
index: true
},
name: {
type: String,
default: 'Sweepstakes',
},
design: {
images: {
type: [],
default: []
},
elements: {
type: [],
default: []
}
},
enabled: {
type: Boolean,
default: false
},
schedule: {
start: {
type: Date,
default: Date.now
},
end: {
type: Date,
default: Date.now
}
},
submissions: {
type: Number,
default: 0
}
});
당신의 Mongoose 모델 이름을 고려하면 다음과 같습니다.sweepstakesModel
이 코드는 추가됩니다.enabled
부울 값이 있는 필드false
컬렉션에 있는 모든 기존 문서:
db.sweepstakesModel.find( { enabled : { $exists : false } } ).forEach(
function (doc) {
doc.enabled = false;
db.sweepstakesModel.save(doc);
}
)
Mongoose에는 스키마 변경에 따라 기존 문서를 마이그레이션하는 것과 관련하여 기본 제공되는 것이 없습니다.필요에 따라 자신의 코드로 이 작업을 수행해야 합니다.새로운 경우와 같은 경우.enabled
필드, 누락된 코드를 처리하도록 코드를 작성하는 것이 가장 깨끗할 것입니다.enabled
설정된 것처럼 필드false
기존 문서를 건드리지 않아도 됩니다.
스키마 자체가 변경되는 한, 당신은 단지 당신의Schema
표시한 대로 정의하지만 새 필드처럼 변경됩니다.default
값은 이후의 새 문서에만 영향을 미칩니다.
저도 이주와 같은 것을 찾고 있었지만 찾지 못했습니다.또는 기본값을 사용할 수 있습니다.키에 기본값이 있고 키가 없으면 기본값을 사용합니다.
기본값은 문서 골격이 구성될 때 적용됩니다.즉, 새 문서(새 MyModel)를 만들거나 기존 문서(MyModel.findById)를 찾을 경우 특정 키가 없는 경우 두 문서 모두 기본값이 됩니다.
저도 똑같은 문제를 겪었고, 다음과 같은 것을 발견했습니다.findOneAndUpdate()
부르는 것보다save
이전 문서를 먼저 모두 삭제할 필요 없이 스키마 파일을 업데이트할 수 있습니다.
요청이 있으면 코드 스니펫을 게시할 수 있습니다.
mongo 셸을 사용하여 특정 컬렉션의 기존 문서를 업데이트할 수 있습니다.
db.SweeptakesModel.update({}, {$set: {"enabled": false}}, {upsert:false, multi:true})
노드를 사용하여 앱을 구축할 때 기존 스키마에 추가해야 하는 유사한 요구 사항이 있었는데, 도움이 되는 이 (오래 전에 게시된) 쿼리만 발견했습니다.
기존 레코드를 업데이트하기 위해 스키마의 원래 설명에 있는 줄을 소개하고 다음 줄과 유사한 것을 한 번만 실행하여 추가한 스키마:
myModelObject.updateMany( { enabled : { $exists : false } }, { enabled : false } )
여기서 언급하고 싶은 기능은 'updateMany'입니다.
Vickar가 제안한 것 외에도, 여기 Mongoose 예제가 Javascript(Nodejs)에 작성되었습니다.
const mongoose = require('mongoose');
const SweeptakesModel = mongoose.model(Constants.SWEEPTAKES,sweepstakesSchema);
SweeptakesModel.find( { enabled : { $exists : false } }).then(
function(doc){
doc.enabled = false;
doc.save();
}
)
언급URL : https://stackoverflow.com/questions/14287617/mongoose-changing-schema-format
'itsource' 카테고리의 다른 글
오라클 피벗 쿼리는 열 이름 주위에 따옴표가 있는 열을 제공합니다.뭐라고? (0) | 2023.07.01 |
---|---|
SQL Server에서 OPTION(MAXDOP 1)을 사용하는 목적은 무엇입니까? (0) | 2023.07.01 |
레일의 ERB에서 <%, <%=, <%# 및 -%>의 차이는 무엇입니까? (0) | 2023.07.01 |
SQL 서버:풀링된 연결 간의 절연 수준 누출 (0) | 2023.07.01 |
SQL Server에서 관련 없는 내용을 쓰는 것을 중지하는 방법(1개 행이 영향을 받음) (0) | 2023.07.01 |