Docs 菜单
Docs 主页
/ /
模型数据

支持的类型 - C++ SDK

Realm C++ SDK 目前支持这些属性类型。

可选项使用类模板 std::Optional。

您可以使用以下类型来定义对象模型属性。

要了解如何将特定数据类型映射到 App Services 模式中的 BSON 类型,请参阅 Atlas App Services 文档中的数据模型映射

类型
必需
Optional

bool

bool boolName;
std::optional<bool> optBoolName;

Int64

int64_t intName;
std::optional<int64_t> optIntName;

double

double doubleName;
std::optional<double> optDoubleName;

字符串

std::string stringName;
std::optional<std::string> optStringName;

枚举

Enum enumName;
std::optional<Enum> optEnumName;

二进制数据

std::vector<std::uint8_t> binaryDataName;
std::optional<std::vector<std::uint8_t>> optBinaryDataName;

Date

std::chrono::time_point<std::chrono::system_clock> dateName;
std::optional<std::chrono::time_point<std::chrono::system_clock>> optDateName;

Decimal128

realm::decimal128 decimal128Name;
std::optional<realm::decimal128> optDecimal128Name;

UUID

realm::uuid uuidName;
std::optional<realm::uuid> optUuidName;

ObjectID

realm::object_id objectIdName;
std::optional<realm::object_id> optObjectIdName;

混合数据类型

realm::mixed mixedName;

不适用

Map

std::map<std::string, SomeType> mapName;

不适用

名单

std::vector<SomeType> listTypeName;

不适用

std::set<SomeType> setTypeName;

不适用

用户定义对象

不适用

MyClass* opt_obj_name;

用户定义的嵌入式对象

不适用

MyEmbeddedClass* opt_embedded_object_name;

上述一些受支持的类型是以下类型的别名:

  • mixed:类似联合的对象,可以表示任何受支持类型的值。它是使用类模板 std::variant 来实现的。此实施意味着mixed 属性会保存其替代类型之一的值,或者在发生错误的情况下 — 无值。

  • 对于日期,请使用chrono 库存储相对于 system_clocktime_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 数据模型中的属性:

  1. 列表,一种表示模型中对多关系的类型。

  2. ,一种表示模型中具有唯一值的一对多关系的类型。

  3. Linking_objects ,一种表示模型中反向关系的类型。

  4. Map ,一种表示具有唯一键的键值对关联数组的类型。

活动对象一样,Realm 集合通常也为实时集合:

  • 实时结果集合始终会反映关联查询的当前结果。

  • 实时列表始终会反映 Realm 实例关系的当前状态。

collection处于实时状态的一种情况是collection处于非托管状态。例如,尚未添加到 Realm 或已从 Realm 移出的 Realm 对象的 List 属性就处于非活动状态。

collection通知相结合,实时collection可实现简洁的响应式代码。例如,假设您的视图显示查询结果。 您可以在视图代码中保留对结果collection的引用,然后根据需要读取结果collection,而无需刷新它或验证它是否是最新的。

重要

结果索引可能会发生变化

由于结果会自动更新自身,因此请勿存储集合中对象的位置索引或集合中对象的数量。存储的索引或数量值在您使用时可能已过期。

后退

对象类型和模式

在此页面上