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

Ed *_*ain 5 realm ios react-native

在我爱上 react-native 和 iOS 上的 Realm 之前,我正在尝试更多地了解如何处理迁移。这句话让我很担心:

领域反应本机 0.10.0

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

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

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

这不起作用:

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

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

只要我只添加新属性,迁移就会简单吗?

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

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

Ari*_*Ari 5

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

export default new Realm({schema: [AppSetting, Gps, ...], schemaVersion: 0});
Run Code Online (Sandbox Code Playgroud)

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

当您使用新的 schemaVersion/schema 初始化 Realm 时,所有新属性都会被添加,而缺少的属性会被移除。因此,如果您重命名一个属性,这最终将添加一个具有新名称的新属性,并删除旧属性及其数据。现在,如果您想将数据从一个属性复制到另一个属性,您需要分两步完成,因此旧属性和新属性同时存在,允许您进行复制。您还需要跟踪是否进行了复制,以便仅在第一次使用新模式打开 Realm 时执行此操作。如果您只添加属性,则可以避免大部分(如果不是全部)这种复杂性。

我们没有时间完成初始版本的迁移,但好消息是大部分功能是在内部实现的,只需要通过 js api 公开。事情的工作原理是,您将能够在打开 Realm 时传递迁移功能,这将使您可以访问迁移前和迁移后的 Realm,从而允许您根据需要复制数据。我们希望在接下来的几个版本之一中完成这项工作。