Docs 菜单
Docs 主页
/ /
Atlas Device SDKs
/ / /

集合 - Node.js SDK

在此页面上

  • 概述
  • 结果
  • 列表
  • 结果为延迟计算出的结果
  • 集合的实时性
  • 使用collection
  • 限制查询结果
  • 分页
  • 总结

Realm 有几种类型来表示对象组,我们将其称为collection。集合是包含零个或多个Realm 类型实例的对象。

您可以使用 Realm 的查询引擎对任意集合进行筛选和排序。集合为实时对象,因此它们始终会反映当前线程上 Realm 实例的当前状态。此外,还可通过订阅集合通知来侦听集合中的更改。

结果集合表示查询操作的延迟计算结果。结果不可变:您无法在结果集合中添加或删除元素。结果具有确定其内容的关联查询。

提示

另请参阅:

列表表示单一类型值的集合。列表被声明为对象模型中的属性,并且与查询无关。

列表的行为与普通 JavaScript 数组类似,只是它们只能存储单一类型的值,您可以通过将 type属性设置为有效属性类型的名称或另一个 Realm 对象类型的名称来指示该类型。

const PetOwnerSchema = {
name: "PetOwner",
primaryKey: "_id",
properties: {
_id: "objectId",
person: "Person",
pets: {
type: "list",
objectType: "string", // this could also be a Realm object:
// objectType: "Pet",
optional: false, //null values are not allowed
},
},
};

您只能在写事务中修改列表,并且列表是可变的:在写事务中,您可以向列表添加和删除元素。

Realm 仅在您请求该查询的结果时才运行查询。 这种延迟求值使您能够编写优雅、高性能的代码来处理大型数据集和复杂查询。

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

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

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

在以下情况下,collection处于实时状态:

  • 它是一个 结果集合 ,您可以使用 for..in 对其进行遍历 或 for..of 语句。即使您已删除或修改集合的对象以将其从生成结果集合的筛选器中排除,这两个语句仍将继续遍历集合中的对象。

  • 该集合是冻结的Results.snapshot()。

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

重要

索引可能会更改

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

由于延迟求值,您不需要任何特殊机制来限制 Realm 的查询结果。 例如,如果您的查询匹配数千个对象,但您只想加载前十个对象,则仅访问collection的前十个元素。

借助延迟求值,分页的常见任务变得非常简单。例如,假设您有一个与某一查询关联的结果集合,而该查询可与您 Realm 中的数千个对象匹配。您选择每页显示一百个对象。要前进到任一页面,只需从与目标页面相对应的索引开始访问结果集合中的元素即可。

  • Realm collection是包含零个或多个Realm 实例的container。

  • Collection主要有两种:列表结果。列表定义 Realm 类型的多对多关系,而结果表示读取操作的延迟加载输出。

  • 结果collection的延迟求值意味着无需设计特殊查询来获取有限或分页的结果。执行查询并根据需要从collection中读取。

  • Realm 中的数据是实时的,这意味着对象始终反映其最近保存的状态。

后退

字段类型

来年

计数器