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

在我接触react-native和iOS的领域之前,我想了解更多关于如何处理迁移的知识。 这个说法让我担心:

境界React Native 0.10.0

  • https://realm.io/docs/react-native/latest/#migrations

如上所述,迁移目前仅限于在打开Realm时更新模式和schemaVersion。 数据迁移尚未得到支持,但可能在未来添加。

我明白这意味着我需要增加schemaVersion 每次我改变**任何模式**。

我怎样才能指定多个模式,每个模式都有自己的模式版本?

这不起作用:

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

这假设我可能需要经常修改我更复杂的模式,直到我把事情做好。

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

我假设我不能重命名或删除现有的属性?

对领域迁移的build议非常感谢,

您需要为整个模式指定一个schemaVersion:

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

当你更新模式中的任何objectSchema时,你需要碰撞你的schemaVersion。 这意味着某个单独的objectSchema将在多个schemaVersions中保持不变,但我认为这比每个对象types具有不同的版本要简单。

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

我们没有时间完成最初版本的迁移,但是好消息是大部分function都是在内部实现的,只需要通过js apis公开就可以了。 工作方式是,当你打开一个Realm时,你将能够通过一个迁移function,这个function将允许你访问迁移前和迁移后的Realm,允许你根据需要复制数据。 我们希望在接下来的几个版本中完成。