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

时间:2016-03-15 21:47:56

标签: ios react-native realm

在我爱上本土和iOS的领域之前,我想了解更多有关如何处理迁移的信息。这句话让我担心:

Realm React Native 0.10.0

  

迁移目前仅限于更新架构和   如上所述打开领域时的schemaVersion。数据迁移   尚不支持,但将来可能会添加。

我理解这意味着每次我对**任何架构进行更改时,我都需要增加schemaVersion

如何指定多个模式,每个模式都有自己的模式版本?

这不起作用:

export default new Realm(
  {schema: [AppSetting], schemaVersion: 0},
  {schema: [Gps], schemaVersion: 3},
  {schema: [Waypoint], schemaVersion: 4},
  {schema: [FlightPath], schemaVersion: 1},
);

这假设我的更复杂的模式可能需要经常修改,直到我做对了。

只要我只添加新属性,迁移是否会很简单?

我假设我无法重命名或删除现有属性?

非常感谢有关领域迁移的建议,

1 个答案:

答案 0 :(得分:3)

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

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

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

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

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