У меня есть коллекция под названием User
. В нем есть поле profile
, которое имеет два поля:
const mongoose = require('mongoose')
const Schema = mongoose.Schema
const User = new Schema({
profile: {
name: {
type: String,
match: [
/^([^0-9]*)$/,
'WrongNameFormat'
]
},
lastName: {
type: String,
match: [
/^([^0-9]*)$/,
'WrongLastNameFormat'
]
}
}
})
Я хочу переименовать name
в firstName
, создав сценарий миграции.
- Добавить
firstName
в User
схема. - Копирование
name
значений в firstName
значения. - Удаление
name
значений и name
из схемы. - Выполнениевышеупомянутые шаги как транзакция монго.
Я думаю, что некоторые проблемы могут возникнуть при обновлении базы данных в рабочем состоянии:
- Мне также нужно изменить код сервера так, чтобыкод только создает / обновляет
firstName
поле. - Существует определенное условие гонки между тем, когда будет обновляться код сервера, и тем, когда будет обновляться схема, поэтому при обновлении документов некоторые коды сервера документов все еще могут использоватьold
name
.
Каков наилучший способ решения таких проблем? Проводит ли он техническое обслуживание на сервере, чтобы пользователи приложения не вмешивались в процесс кода сервера / процесс миграции?