更改列类型后如何迁移RealmJS db?

时间:2019-01-22 02:11:57

标签: database react-native realm realm-mobile-platform realm-js

我在我的具有本机模式realmjs的react-native应用程序中使用settings DB。我想将该架构的属性类型从int更改为string。因此,我了解到我需要执行迁移,因此我决定执行linear迁移。对于迁移,我按照Realm文档中的示例进行操作,最终完成了以下操作:

const schemaList = [schemaV1,schemaV2];
let nextSchemaIndex = Realm.schemaVersion(Realm.defaultPath);
while (nextSchemaIndex < schemaList.length) {
    const migratedRealm = new Realm(schemaList[nextSchemaIndex++]);
    migratedRealm.close();
}

export default new Realm(schemaList[schemaList.length - 1]);

schemaV1是数据库的旧版本,而schemaV2是属性类型更改后的数据库的最新版本。 schemaV2还具有如下迁移功能:

    if (oldRealm.schemaVersion < 1) {
        const oldObjects = oldRealm.objects(TBL_MOBILE_SETTING);
        const newObjects = newRealm.objects(TBL_MOBILE_SETTING);
        for (let i = 0; i < oldObjects.length; i++) {
            newObjects[i].module    = oldObjects[i].module;
            newObjects[i].setting   = oldObjects[i].setting;
        }
    }

但是最后,当我尝试运行该应用程序时,它崩溃并显示一条错误消息

  

需要数据库迁移

这是否意味着schemaV2中的迁移功能永远不会运行?如果是这样,如何确保所有迁移功能均正常运行?还是我想念其他东西?

编辑

我发现RealmJS中不允许更改列类型,我添加了一个新列并尝试执行迁移,但仍然存在相同的错误。

1 个答案:

答案 0 :(得分:0)

问题是我所猜测的。未调用迁移功能。我必须创建一个google-api-python-client==1.7.4 google-auth==1.5.1 google-auth-httplib2==0.0.3 函数并在export const文件中调用迁移函数,因为它是在应用程序启动时调用的文件。