创建数据模型
Overview
Device Sync 数据模型由两个一致的模式组成:Atlas Device SDK 中使用的 Realm 对象模式和 App Services 模式。
您可以首先通过 Realm Object Schema 或者首先通过 App Services Schema 为应用创建数据模型:
从 Realm 对象模式创建 App Services 模式:如果您正在开发移动优先模式,并且 Atlas 集群中尚无数据,则可以将 Realm 对象模式转换为 App Services 模式。
从 App Services 架构创建 Realm 对象架构:如果 MongoDB Atlas 集群中已有数据,则 MongoDB 会通过对数据进行采样来生成架构。然后,Atlas App Services 可以将该架构转换为 Realm 对象架构,以便通过 Atlas Device SDK 在移动应用程序中使用。
无论采用哪种方法,将 Atlas 集群和移动应用程序配置为使用各自的数据模型时,在服务器和客户端之间对数据模型的更改都会自动更新。
先决条件
应用必须拥有至少一个链接的数据源,才能创建架构。
从 Realm 对象模式创建 App Services 模式
您可以通过移动客户端 SDK 更改或定义 Realm 对象模式。只有在启用开发模式时才允许更改 Realm 对象模式。App Services 会将对 Realm 对象模式的任何更改反映到用于 App Services 模式中。
有关创建 Realm 对象模式的信息,请参阅特定于 Atlas Device SDK 的文档。
编辑 Realm 对象模式
在继续开发应用程序的过程中,您需要使用它来修改数据模型,以便根据这些更改执行不同的数据验证规则。当 Development Mode 开启时,您可以在客户端代码中编辑 Realm 对象模式。在 Development Mode 关闭时会进行数据验证,因此 Development Mode 未开启时,App Services 不接受对 Realm 对象模式的更改。
重要
必填主键 _id
要使用 Atlas Device Sync,您的数据模型必须有一个名为 _id
的主键字段。_id
可以是 string
、int
或 objectId
类型。
例子
一个群组正在开发一款社交媒体应用程序。当该群组首次开发其应用程序时,某一用户的生日是该用户的数据模型的必填字段。然而,由于针对所存储用户数据量的隐私问题,管理层制定了一个新要求:将该用户的生日字段设为可选字段。应用程序开发者在 App Services 用户界面中开启 Development Mode,然后在其客户端代码中编辑用户模型。
const realmObjectModel = { name: 'User', properties: { _id: 'objectId', _partition: 'string', name: 'string', // developers set optional: true to adhere to the new requirement birthday: {type: 'date', optional: true}, }, primaryKey: '_id' }; Realm.open({schema: realmObjectModel, sync: {/*...*/}}) .then(realm => { // ... use the realm instance to read and modify data })
使用 Realm 对象模式更改更新您的应用程序服务模式
当 Development Mode 打开时,App Services 不会根据您的数据模型验证写入,从而允许您自由更新 Realm 对象模型。当您关闭 Development Mode 时,MongoDB App Services 会自动更新您的 App Services 模式,并开始据此对 Atlas 集群强制执行数据验证。
在 Sync(同步)屏幕,点击 Development Mode(开发模式)旁边的滑块关闭 Development Mode。UI 指示开发模式已关闭。
注意
要从移动客户端代码进行未来的数据模型更新,可再次执行此过程。
从 App Services 模式创建 Realm 对象模式
定义 App Services 模式
首先,确保已有定义的 App Services 模式。App Services 将此 App Services 模式转换为要在移动应用程序中配置和使用的 Realm 对象模式。
请注意以下要求:
App Services 模式必须有一个名为
_id
的主键字段。_id
可以是string
、int
或objectId
类型。您的模式对象类型名称不能超过 57 UTF-8 个字符。
使用 Realm 对象模式打开 Realm
您可以在客户端应用程序中使用生成的 Realm 对象模式。为了开始使用数据模型执行数据验证,您可以使用 Realm 对象模式打开一个域。这将防止不正确的数据从移动客户端进入数据库。
对于要集成到移动应用程序代码中的对象模型,单击 Realm 对象模式右侧的 Copy 按钮。这会将您选择的 SDK 的 Realm 对象模式代码复制到剪贴板。
在 IDE 中打开移动应用程序代码,然后粘贴 Realm 对象模式代码。
const UserSchema = { // your copied and pasted Realm Object Schema name: 'User', properties: { _id: 'objectId', _partition: 'string', name: 'string', birthday: 'date' }, primaryKey: '_id' }; // Initialize a realm with your Realm Object Schema Realm.open({schema: UserSchema, sync: { /* ... */ }}) .then(realm => { // ... use the realm instance to read and modify data })
请参阅 Atlas Device SDK 的特定文档,以使用生成的 Realm 对象模式。