Realm Вставить новую схему в ReactNative
const schema1 = [
rolesSchema,
userMutedInRoomSchema,
uploadsSchema,
usersForMentionSchema,
contactsSchema,
];
const schema2 = [
rolesSchema,
userMutedInRoomSchema,
uploadsSchema,
usersForMentionSchema,
contactsSchema,
stickersPackagesSchema,
stickersCollectionSchema
];
Выше две схемы Schema1 - это та, которую я уже использую, и она работает нормально. Schema2 - это новая схема, в которую я добавил новые таблицы (схемы) в конце после схемы контактов. Я следовал за документацией, но я не мог найти ничего, что объясняет добавление новых таблиц в старую схему. Ниже приведен код, который я использую для инициализации новой схемы, которая дает сбой во время выполнения
const path = database.replace(/(^\w+:|^)\/\//, '');
return this.databases.activeDB = new Realm({
path: `${ path }Value.realm`,
schema:schema2,
schemaVersion:1,
migration: (oldRealm, newRealm) => {
},
});
1 ответ
Решение
Если вы обновляете схему производственного приложения. Затем вам нужно написать логику миграции и обновить schemaVersion.
Realm.open({
schema: [PersonSchema],
schemaVersion: 1,
migration: (oldRealm, newRealm) => {
// only apply this change if upgrading to schemaVersion 1
if (oldRealm.schemaVersion < 1) {
const oldObjects = oldRealm.objects('Person');
const newObjects = newRealm.objects('Person');
// loop through all objects and set the name property in the new schema
for (let i = 0; i < oldObjects.length; i++) {
newObjects[i].name = oldObjects[i].firstName + ' ' + oldObjects[i].lastName;
}
}
}
}).then(realm => {
const fullName = realm.objects('Person')[0].name;
});
См. https://realm.io/docs/javascript/latest/.
Если вы сейчас разрабатываете приложение, вы можете просто обновить schemaVersion и добавить deleteRealmIfMigrationNeeded
свойство удалять старые устаревшие данные