首页 文章

如何在iOS上处理Realm React Native迁移和schemaVersion?

提问于
浏览
4

在我爱上本土和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 回答

  • 3

    您需要为整个架构指定单个schemaVersion:

    export default new Realm({schema: [AppSetting, Gps, ...], schemaVersion: 0});
    

    当您更新架构中的任何objectSchema时,您需要碰撞schemaVersion . 这意味着一些单独的objectSchema将在多个schemaVersions中保持相同,但我认为这比为每个对象类型使用不同的版本要简单 .

    使用新的schemaVersion / schema初始化Realm时,将添加所有新属性并删除属性并将其删除 . 因此,如果重命名属性,最终将添加具有新名称的新属性,并删除旧属性及其数据 . 目前,如果要将数据从一个属性复制到另一个属性,则需要分两步执行,因此旧属性和新属性同时存在,允许您进行复制 . 您还需要跟踪是否执行了该副本,因此您只能在第一次使用新架构打开Realm时执行此操作 . 如果您只是添加属性,则可以避免大多数(如果不是全部)这种复杂性 .

    我们没有时间完成初始版本的迁移,但好消息是大多数功能都在内部实现,只需要通过js apis公开 . 事情是如何工作的,你可以在打开Realm时传递一个迁移功能,这样你就可以访问迁移前和迁移后的Realms,允许你根据需要复制数据 . 我们希望在接下来的几个版本中完成这个 .

相关问题