Realm C++ SDK 目前支持这些属性类型。
可选项使用类模板 std::Optional。
属性速查表
您可以使用以下类型来定义对象模型属性。
要了解如何将特定数据类型映射到 App Services 模式中的 BSON 类型,请参阅 Atlas App Services 文档中的数据模型映射。
类型 | 必需 | Optional | ||
|---|---|---|---|---|
bool | | | ||
Int64 | | | ||
double | | | ||
字符串 | | | ||
枚举 | | | ||
二进制数据 | | | ||
Date | | | ||
Decimal128 | | | ||
UUID | | | ||
ObjectID | | | ||
混合数据类型 | | 不适用 | ||
Map | | 不适用 | ||
名单 | | 不适用 | ||
集 | | 不适用 | ||
用户定义对象 | 不适用 | | ||
用户定义的嵌入式对象 | 不适用 | |
支持的类型实施详情
上述一些受支持的类型是以下类型的别名:
mixed:类似联合的对象,可以表示任何受支持类型的值。它是使用类模板 std::variant 来实现的。此实施意味着mixed属性会保存其替代类型之一的值,或者在发生错误的情况下 — 无值。对于日期,请使用chrono 库存储相对于
system_clock的time_point:<std::chrono::time_point<std::chrono::system_clock>>
地图/词典
Map是一个关联数组,其中包含具有唯一键的键值对。
您可将 Map 声明为对象的属性:
namespace realm { struct Dog { std::string name; std::map<std::string, std::string> favoriteParkByCity; }; REALM_SCHEMA(Dog, name, favoriteParkByCity) } // namespace realm
字符串是映射键唯一支持的类型,但映射值可以是:
SDK 支持的任何数据类型所需的版本
可选的用户定义对象链接
可选嵌入式对象
Realm 不允许在映射键中使用 . 或 $ 字符。您可以使用百分比编码和解码来存储包含这些不允许的任一字符的映射键。
// Percent encode . or $ characters to use them in map keys auto mapKey = "Monday.Morning"; auto encodedMapKey = "Monday%2EMorning";
集合类型
Realm 有多种类型来表示对象组,而我们将其称为集合。集合是指包含零个或多个某种 Realm 类型实例的对象。Realm 集合具有同质性:集合中的所有对象均为同一类型。
您可以使用 Realm 的查询引擎对任意集合进行筛选和排序。集合为实时对象,因此它们始终会反映当前线程上 Realm 实例的当前状态。此外,还可通过订阅集合通知来侦听集合中的更改。
结果
C++ SDK结果集合是一种表示从查询中检索到的对象的类型。 Results集合表示查询操作的延迟计算结果。 结果不可变:您无法在结果集合中添加或删除元素。 结果具有确定其内容的关联查询。
有关更多信息,请参阅阅读文档。
集
C++ SDK collection 表示包含不同值的多对多关系。C++ SDK 集支持以下类型(及其可选版本):
二进制数据
bool
double
Date
Int64
混合
ObjectId
对象
字符串
UUID
与C++ std::设立 一样, C++ SDK设立是一种泛型类型,会根据其存储的类型进行参数化。
您只能在写事务(write transaction)期间调用设置更改方法。您可以在可变集上注册变更侦听器。
集合即属性
C++ SDK 还提供了几种collection类型,您可以将其用作Realm 数据模型中的属性:
集合的实时性
与活动对象一样,Realm 集合通常也为实时集合:
实时结果集合始终会反映关联查询的当前结果。
实时列表始终会反映 Realm 实例关系的当前状态。
collection处于非实时状态的一种情况是collection处于非托管状态。例如,尚未添加到 Realm 或已从 Realm 移出的 Realm 对象的 List 属性就处于非活动状态。
与collection通知相结合,实时collection可实现简洁的响应式代码。例如,假设您的视图显示查询结果。 您可以在视图代码中保留对结果collection的引用,然后根据需要读取结果collection,而无需刷新它或验证它是否是最新的。
重要
结果索引可能会发生变化
由于结果会自动更新自身,因此请勿存储集合中对象的位置索引或集合中对象的数量。存储的索引或数量值在您使用时可能已过期。