在我爱上本土和iOS的领域之前,我想了解更多有关如何处理迁移的信息 . 这句话让我担心:
Realm React Native 0.10.0
迁移目前仅限于在打开Realm时更新架构和schemaVersion,如上所述 . 尚不支持数据迁移,但可能会在将来添加 .
我理解这意味着我需要增加schemaVersion **each time I make a change to any schema ** .
How can I specify multiple schemas, each with their own schema versions ?
这不起作用:
export default new Realm(
{schema: [AppSetting], schemaVersion: 0},
{schema: [Gps], schemaVersion: 3},
{schema: [Waypoint], schemaVersion: 4},
{schema: [FlightPath], schemaVersion: 1},
);
这假设我的更复杂的模式可能需要经常修改,直到我把事情做好 .
只要我只添加新属性,迁移是否会很简单?
我假设我无法重命名或删除现有属性?
关于领域迁移的建议非常感谢,
1 回答
您需要为整个架构指定单个schemaVersion:
当您更新架构中的任何objectSchema时,您需要碰撞schemaVersion . 这意味着一些单独的objectSchema将在多个schemaVersions中保持相同,但我认为这比为每个对象类型使用不同的版本要简单 .
使用新的schemaVersion / schema初始化Realm时,将添加所有新属性并删除属性并将其删除 . 因此,如果重命名属性,最终将添加具有新名称的新属性,并删除旧属性及其数据 . 目前,如果要将数据从一个属性复制到另一个属性,则需要分两步执行,因此旧属性和新属性同时存在,允许您进行复制 . 您还需要跟踪是否执行了该副本,因此您只能在第一次使用新架构打开Realm时执行此操作 . 如果您只是添加属性,则可以避免大多数(如果不是全部)这种复杂性 .
我们没有时间完成初始版本的迁移,但好消息是大多数功能都在内部实现,只需要通过js apis公开 . 事情是如何工作的,你可以在打开Realm时传递一个迁移功能,这样你就可以访问迁移前和迁移后的Realms,允许你根据需要复制数据 . 我们希望在接下来的几个版本中完成这个 .