Realm

一个 Realm 实例代表一个 Realm 数据库。

const Realm = require('realm');

相关类

应用
auth
Collection
凭证
Dictionary
名单
MongoDBCollection
对象
结果
user
Worker
MongoDB
MongoDBDatabase
Realm.BSON
静态恒定

重新导出“bson”包,无需显式依赖“bson”包即可访问 BSON 类型。

请参阅: BSON 文档以了解更多信息。
isClosed
只读

指示此 Realm 是否已关闭。

类型
boolean
isEmpty
只读

指示此 Realm 是否包含任何对象。

类型
boolean
isInTransaction
只读

指示此 Realm 是否处于写事务(write transaction)中。

类型
boolean
isReadOnly
只读

指示此 Realm 是否以只读方式打开。

类型
boolean
路径
只读

存储此 Realm 的文件的路径。

类型
string
模式
只读

构造此 Realm 时在Configuration中提供的模式的规范化表示。

类型
[CanonicalObjectSchema, ...]
模式版本
只读

此 Realm 的当前模式版本。

类型
number
订阅
只读

获取最新的 Flexible Sync 订阅集。

类型
Realm.App.Sybc.SubscriptionSet
syncSession
只读

如果这是同步 Realm,则获取同步会话

类型
Session
new Realm ( config )

使用提供的config创建新的Realm实例。 如果在config.path处尚不存在 Realm(如果未提供,则在Realm.defaultPath处)尚不存在,则此构造函数将使用提供的config.schema创建该 Realm(在本例中是必需的)。 否则,实例将从该路径的文件访问现有 Realm。 在这种情况下, config.schema可选项,保持不变,除非config.schemaVersion递增,在这种情况下,Realm 将自动迁移以使用新模式。 对于基于查询的同步,需要config.schema 。 如果未定义config.schema ,则会引发异常。

参数
  • config 可选
抛出异常
  • Error
    • 如果提供的config中的任何内容无效。

  • IncompatibleSyncedRealmError
    • 当打开不兼容的同步 Realm 时

Realm.copyBundledRealmFiles()
静态

复制任何 Realm 文件(即 *.realm )从应用程序目录复制到应用程序的文档目录中,以便 Realm 可以打开和使用它们。 如果该文件已存在于文档目录中,则不会覆盖该文件,因此可以安全地多次调用该文件。

应在打开 Realm 之前调用此函数,以便将捆绑的 Realm 文件移至可写入的位置,例如:

// Given a bundled file, example.realm, this will copy example.realm (and any other .realm files)
// from the app bundle into the app's documents directory. If the file already exists, it will
// not be overwritten, so it is safe to call this every time the app starts.
Realm.copyBundledRealmFiles();

const realm = await Realm.open({
  // This will open example.realm from the documents directory, with the bundled data in.
  path: "example.realm"
});

这仅适用于 React Native。

抛出异常
  • Error
    • 如果发生 I/O 错误或未实施方法。

Realm.createTemplateObject(模式)
静态

为 Realm 模型类创建模板对象,其中所有可选字段均为undefined ,所有必填字段均具有给定数据类型的默认值,该值可以是模式中default属性设置的值,也可以是数据类型(如果模式未指定数据类型),即0 、 false 和""

参数
Realm.deleteFile(配置)
静态

删除给定配置的 Realm 文件。

参数
抛出异常
  • Error
    • 如果提供的config中的任何内容无效。

Realm.exists(配置)boolean
静态

检查磁盘上是否已存在 Realm。

参数
抛出异常
  • Error
    • 如果提供的config中的任何内容无效。

返回 如果设备上存在该 Realm,boolean 返回 ,否则返回truefalse
Realm.open(配置)ProgressPromise
静态

使用 Promise 异步打开 Realm。 如果 Realm 已同步,则在可用之前将完全同步。 对于基于查询的同步,需要config.schema 。 如果未定义config.schema ,则会引发异常。

参数
  • config
    • 类型: Configuration
    • 如果没有定义配置,则会打开默认 Realm

抛出异常
  • Error
    • 如果提供的config中的任何内容无效。

返回ProgressPromise
  • 一个 Promise,当 Realm 实例可用时,将使用 Realm 实例来解决该 Promise。
Realm.schemaVersion(path, EncryptionKey )number
静态

获取给定路径中 Realm 的当前模式版本。

参数
  • 路径
    • 类型: string
    • 存储 Realm 数据库的文件的路径。

  • encryptionKey 可选
    • 类型: ArrayBufferArrayBufferView
    • 仅在访问加密 Realm 时需要。

抛出异常
  • Error
    • 传递无效或不匹配的加密密钥时。

返回模式的number版本;如果path -1
addListener(名称,回调)

为指定的事件 添加侦听器callbackname

参数
  • 名称
    • 类型: string
    • 应导致调用回调的事件的名称。 目前,仅支持 "change" 和 "schema" 事件

  • callback
    • 类型: callback(Realm, string)callback(Realm, string, Schema)
    • 发生变更事件时调用的函数。 对于每个事件,每个回调只会调用一次,无论该事件被添加多少次。

抛出异常
  • Error
    • 如果提供的事件无效,或者name callback不是函数。

beginTransaction()

启动写事务(write transaction)。

进行事务时,强烈建议进行错误处理。 如果不处理错误,数据可能会不一致。 错误处理通常涉及取消事务。

抛出异常
  • Error
    • 当已处于写事务(write transaction)中时

示例
realm.beginTransaction();
try {
  realm.create('Person', { name: 'Arthur Dent',  origin: 'Earth' });
  realm.create('Person', { name: 'Ford Prefect', origin: 'Betelgeuse Five' });
  realm.commitTransaction();
} catch (e) {
  realm.cancelTransaction();
  throw e;
}
cancelTransaction()

取消写事务(write transaction)。

请参阅: beginTransaction()
关闭()

关闭此 Realm,以便可以使用较新的模式版本将其重新打开。 调用此方法后,此 Realm 中的所有对象和collection都不再有效。该方法是幂等的。

commitTransaction()

提交写事务(write transaction)。

请参阅: beginTransaction()
compact()true

将此 Realm 中的所有字符串列替换为字符串枚举列,并压缩数据库文件。

无法从写事务(write transaction)中调用。

Realm如果存在其他实例,则不会进行压实。

正在进行压实时,其他线程或进程打开数据库的尝试将等待。

请注意,压实所需的资源与数据库中的实时数据量成正比。压实的工作原理是将数据库内容写入临时数据库文件,然后用临时数据库替换数据库。

返回如果压实成功,则返回true
创建(type, 属性, updateMode )Realm.Object

创建给定类型和指定属性的新 Realm 对象。 对于注释为非对称的对象模式,不会返回任何对象。 非对称对象模式的 API 将来可能会发生变化。

参数
  • 类型
    • 类型: ObjectType
    • 要创建的 Realm 对象的类型。

  • 属性
    • 类型: Object
    • 没有默认值的所有必需属性的属性值。

  • updateMode 可选
    • 类型: booleanstring
    • 默认: 'never'
    • 可选更新模式。 它可以是以下值之一 - 'never':仅创建对象。 如果存在现有对象,则会引发异常。 这是默认值。 - 'all':如果找到现有对象,提供的所有属性都将更新,任何其他属性将保持不变。 - 'modified':如果现有对象存在,则仅更新值实际更改的属性。 这提高了通知和服务器端性能,但也对如何合并跨设备的变更产生了影响。 对于大多数使用案例,该行为与应如何合并变更的直观行为相匹配,但如果将更新整个对象视为原子操作,则不应使用此模式。

返回Realm.Object
删除(对象)

删除提供的 Realm 对象,或提供的 collection 内的每个对象。

参数
deleteAll()

警告:这将删除 Realm 中的所有对象!

deleteModel(名称)

删除 Realm 模型,包括其所有对象。 如果在迁移函数外部调用,schemaschemaVersion都会被更新。

参数
  • 名称
    • 类型: string
    • 模型名称

objectForPrimaryKey(type, key)Realm.Object or null

按主键搜索 Realm 对象。

参数
  • 类型
    • 类型: ObjectType
    • 要搜索的 Realm 对象的类型。

  • key
    • 类型: numberstring
    • 要搜索的对象的主键值。

抛出异常
  • Error
    • 如果传递到此方法的类型无效,或者Realm 对象类型的 中没有指定primaryKey ObjectSchema

返回Realm.Object ;如果未找到对象,则返回null
对象(类型)Realm.Results

返回 Realm 中给定type的所有对象。

参数
  • 类型
    • 类型: ObjectType
    • 要检索的 Realm 对象的类型。

抛出异常
  • Error
    • 如果传递给此方法的类型无效,或者该类型标记为嵌入式或不对称。

返回Realm.Results ,它将在创建和销毁对象时进行实时更新。
removeAllListeners名称

删除所有事件侦听器(仅限于事件name ,如果提供)。

参数
  • 名称 可选
    • 类型: string
    • 应删除其侦听器的事件的名称。 目前,仅支持 "change" 和 "schema" 事件

抛出异常
  • Error
    • 当提供的事件name无效时

removeListener(名称,回调)

删除指定事件callback 的侦听器name

参数
  • 名称
    • 类型: string
    • 事件名称。 目前,仅支持 "change" 和 "schema" 事件

  • callback
    • 类型: callback(Realm, string)callback(Realm, string, Schema)
    • 之前通过addListener方法添加为此事件的监听器的函数。

抛出异常
  • Error
    • 如果提供的事件无效,或者name callback不是函数。

(回调)*

在写事务(write transaction)中同步调用提供的callback 。如果事务内部发生异常,您将丢失该事务中的更改,但 Realm 本身不会受到影响(或损坏)。 更准确地说,系统会自动调用beginTransaction()commitTransaction() 。 如果在事务期间引发任何异常,则将调用cancelTransaction()而不是commitTransaction() ,并且该异常将被重新抛出给write()的调用者。

无法进行嵌套事务(在write()中调用write() )。

参数
  • callback
    • 类型: function
返回*的返回值。
writeCopyTo({@link)

使用给定的输出配置写入 Realm 的压缩副本:

  • 输入Realm可以是本地或基于分区的同步、加密或未加密
  • 输出Realm将是本地或基于分区的同步、加密或未加密,具体取决于传递给函数的配置

目标 Realm 路径不能已存在。

请注意,如果从写事务中调用此方法,则写入当前数据,而不是提交上一个写事务时的数据。

参数
  • {@link
    • Realm~Configuration |描述输出 Realm 的配置。

CanonicalObjectSchema

从打开的 Realm 检索到的模式可能具有与输入模式不同的结构。

类型
Object
属性:
  • 名称
    • 类型: string
    • 表示 Realm 对象类型。

  • 主键 可选
    • 类型: string
    • "string""int"属性的名称,该名称在同一 Realm 内的所有该类型对象中必须是唯一的。

  • 嵌入式 可选
    • 类型: boolean
    • 如果 Realm 对象类型为嵌入式,则为 true。嵌入式对象最多只能链接到一个父对象。 默认值:false。

CanonicalObjectSchemaProperty
类型
Object
属性:
  • 名称
    • 类型: string
    • 此属性的名称。

  • 属性 可选
    • 类型: string
    • 使用"linkingObjects"时,该值将表示链接对象上的链接属性

  • 可选
    • 类型: boolean
    • 表示此属性可以赋值为nullundefined 。 对于Realm 对象类型的"list""dictionary""set"属性,这表示列表内的值是否可以分配为nullundefined 。 Realm 对象类型的"list""set"属性以及"linkingObjects"属性不支持此功能。

  • 已索引
    • 类型: boolean
    • 表示此属性已编制索引。 仅支持"string""int""bool"属性。

  • mapTo
    • 类型: string
    • 此属性已设置的别名。

配置

这描述了用于创建Realm实例的不同选项。

有关如何在此库中使用 HTTP 正向代理的详细信息,请参阅在 HTTP proxy 后面使用 Realm JavaScript

类型
Object
属性:
  • encryptionKey 可选
    • 类型: ArrayBufferArrayBufferView
    • 用于加密和解密 Realm 中所有数据的 512 位(64 字节)加密密钥。

  • onMigration 可选
    • 类型: callback(Realm, Realm)
    • 需要迁移时运行的函数。 此函数应提供将Realm 数据模型从先前模式转换为新模式的所有逻辑。此选项与sync不兼容。 该函数有两个参数:

      • oldRealm - 执行迁移之前的 Realm。
      • newRealm - 使用最新schema的 Realm,应根据需要进行修改。
  • deleteRealmIfMigrationNeeded 可选
    • 类型: boolean
    • 默认: false
    • 指定在需要迁移时是否应删除此 Realm。 此选项在同步 Realm 上不可用。

  • shouldCompact 可选
    • 类型: callback(number, number)
    • 在进程生命周期中首次打开 Realm 时调用的函数,用于确定是否应在将其返回给用户之前对其进行压缩。 该函数接受两个参数: - totalSize - 文件总大小(数据 + 可用空间) - usedSize - 文件中数据使用的总字节数。 它返回true以指示应尝试压缩文件。 如果另一个进程正在访问它,则将跳过压实。

  • onFirstOpen 可选
    • 类型: callback(realm)
    • 首次打开 Realm 时调用的函数。 该函数可以在打开 Realm 之前对其进行填充。 调用回调时,Realm 将处于写事务(write transaction)。该回调接受一个参数: - realm - The Realm

  • 路径 可选
    • 类型: string
    • 默认: Realm.defaultPath
    • 应存储 Realm 数据库的文件的路径。 对于同步 Realm,将相对路径与应用程序 ID 和用户 ID 一起使用,以避免与其他应用程序或用户发生冲突。 绝对路径保持不变,在某些平台(iOS 和 Android)上,应用程序可能没有创建或打开文件的权限 - 权限未经验证。 如果指定了相对路径,则相对于Realm.App~AppConfiguration.baseFilePath

  • fifoFilesFallbackPath 可选
    • 类型: string
    • 打开 Realm 会创建许多 FIFO 特殊文件,以便协调跨线程和进程对 Realm 的访问。 如果 Realm 文件存储在不允许创建 FIFO 特殊文件(例如 FAT32 文件系统),则无法打开 Realm。 在这种情况下,Realm 需要一个不同的位置来存储这些文件,并且该属性定义了该位置。 FIFO 特殊文件非常轻量,主 Realm 文件仍将存储在path属性定义的位置。 如果path定义的目录允许 FIFO 特殊文件,则忽略此属性。

  • inMemory 可选
    • 类型: boolean
    • 默认: false
    • 指定是否应在内存中打开此 Realm。 这仍然需要一个路径(可以是默认路径)来标识 Realm,以便其他进程可以打开同一个 Realm。 如果 Realm 大于内存大小,则该文件也将用作交换空间,但它不是持久性的,并且会在关闭最后一个实例时被删除。 此选项与sync不兼容。

  • 只读 可选
    • 类型: boolean
    • 默认: false
    • 指定此 Realm 是否应以只读方式打开。

  • disableFormatUpgrade 可选
    • 类型: boolean
    • 默认: false
    • 指定如果此 Realm 的文件格式是使用旧版本的 Realm 库创建的,是否应自动升级该文件格式。 如果设置为true并且需要升级文件格式,则会引发错误。

  • 模式 可选
    • 类型: [(ObjectClass | ObjectSchema), ...]
    • 指定此 Realm 中的所有 Realm 对象类型。首次在此path创建 Realm 时为必填项。 如果省略,将从现有 Realm 文件中读取模式。

  • 模式版本 可选
    • 类型: number
    • 更改schema后为必填项(且必须递增)。

ObjectClass

Realm 对象将从该构造函数的prototype继承方法、getter 和 setter。 强烈建议此构造函数继承Realm.Object

类型
Class
属性:
  • 模式
    • 类型: ObjectSchema
    • 指定对象模式信息的静态属性。

对象模式
类型
Object
属性:
  • 名称
    • 类型: string
    • 表示 Realm 对象类型。

  • 主键 可选
    • 类型: string
    • "string""int"属性的名称,该名称在同一 Realm 内的所有该类型对象中必须是唯一的。

  • 嵌入式 可选
    • 类型: boolean
    • 如果 Realm 对象类型为嵌入式,则为 true。嵌入式对象最多只能链接到一个父对象。 默认值:false。

  • 不对称 可选
    • 类型: boolean
    • 如果 Realm 对象类型 仅用于非对称同步,则为 true。这意味着该类型的对象不会存储在本地,也无法在本地访问。

示例
let MyClassSchema = {
    name: 'MyClass',
    primaryKey: 'pk',
    properties: {
        pk: 'int',
        optionalFloatValue: 'float?' // or {type: 'float', optional: true}
        listOfStrings: 'string[]',
        listOfOptionalDates: 'date?[]',
        indexedInt: {type: 'int', indexed: true}

        linkToObject: 'MyClass',
        listOfObjects: 'MyClass[]', // or {type: 'list', objectType: 'MyClass'}
        objectsLinkingToThisObject: {type: 'linkingObjects', objectType: 'MyClass', property: 'linkToObject'}

        setOfStrings: 'string',
        setOfOptionalStrings: 'string?', // or {type: 'set', objectType: 'string'}
    }
};
ObjectSchemaProperty
类型
Object
属性:
  • objectType 可选
    • 类型: PropertyType
    • type"list""set""dictionary""linkingObjects"时为必需,并且必须与同一模式中的对象类型匹配,或者对于"list""set""dictionary" ,其他类型,可以存储为 Realm 属性。

  • 属性 可选
    • 类型: string
    • type"linkingObjects"时为必填项,并且必须与 objectType 中指定的类型上的属性名称相匹配,而链接到此属性所属的类型。

  • 访问 可选
    • 类型: any
    • 如未另行指定,此属性在创建时的默认值。

  • 可选 可选
    • 类型: boolean
    • 指示该属性是否可以赋值为nullundefined 。 对于非对象类型的"list""dictionary""set"属性,这表示列表内的值是否可以分配为nullundefined 。 Realm 对象类型的"list""set"属性以及"linkingObjects"属性不支持此功能。

  • 已索引 可选
    • 类型: boolean
    • 指示是否应对此属性编制索引。 仅支持"string""int""bool"属性。

  • mapTo 可选
    • 类型: string
    • 如果 Javascript 属性名称与 Realm 文件中使用的名称不同,请将其设置为 Realm 文件中底层属性的名称。 这可以例如 在 Javascript 中采用与 Realm 文件中使用的命名规则不同的命名规则。 必须使用公共名称读取和写入属性。 可以使用公共和底层属性名称进行查询。

ObjectType

对象的类型可以指定为等于ObjectSchema定义中的name的字符串,可以指定为configuration schema中指定的构造函数。

类型
string or ObjectClass
地产类型

属性类型可以指定为标准内置类型之一,也可以指定为同一模式内的 Realm 对象类型。

对象模式中指定属性类型时,可以将?附加到任何属性类型,以指示其是可选的(即,除了普通值之外,它还可以是null )。 给定类型T ,可以使用以下后缀操作符:

  • t [] 表示该属性是一个Realm.List ,其值的类型为T
  • t <> 表示该属性是一个Realm.Set ,由类型为T的值组成

例如, optionalIntList: 'int?[]'声明一个属性,该属性为可空整数列表,而optionalStringSet: 'string?<>'声明一组可空字符串。 集合报告的和 Realm 模式中的属性类型永远不会使用这些形式。

类型
"bool""int""float""double""string""decimal128""objectId""date""data""list""set""linkingObjects""<ObjectType>"
属性:
  • "bool"
    • 类型: boolean
    • 属性值可以是truefalse

  • "int"
    • 类型: number
    • 可以为属性分配任何数字,但将存储为四舍五入整数,这意味着小数点之后的任何内容都将被截断。

  • "float"
    • 类型: number
    • 可以为属性分配任意数字,但会存储为float ,这可能会导致精度损失。

  • "double"
    • 类型: number
    • 可以为属性分配任意数字,并且不会损失精度。

  • "string"
    • 类型: string
    • 属性值可以是任意字符串。

  • "decimal128"
    • 类型: Decimal128
    • 属性值可以是Decimal128对象(有关详细信息,请参阅bson )。

  • "objectId"
    • 类型: ObjectId
    • 属性 valye 可以是ObjectId对象(有关详细信息,请参阅bson )。

  • "date"
    • 类型: Date
    • 可以为属性分配任何Date实例。

  • "data"
    • 类型: ArrayBuffer
    • 可以为属性分配ArrayBufferArrayBufferView (例如 DataViewInt8ArrayFloat32Array等)实例,但将始终作为ArrayBuffer返回。

  • "set"
  • "<ObjectType>"
    • 类型: Realm.Object
    • 与同一模式中对象的name匹配的字符串(请参阅ObjectSchema )——该属性可以从同一 Realm 内部分配给该类型的任何对象,并且始终是可选的(这意味着它也可以分配给nullundefined )。