Realm JavaScript - v 12.11.1

[!NOTE] Realm 现已更名为 Atlas Device SDK —了解更多

Realm by MongoDB

Realm 数据库

Realm 是一种移动数据库,可直接在手机、平板电脑或可穿戴设备中运行。 该项目托管 Realm 的 JavaScript 和 TypeScript 实现。 目前,我们支持 React Native(iOS 和 Android 上的 JSC 和 Hermes)、Node.js 和 Electron(Windows、MacOS 和 Linux 上)。

什么是 Atlas Device SDKs?

Atlas Device Sync

Atlas Device SDKs是特定于语言和平台的 collection,每个 SDK 都包含一套应用开发工具,针对移动和边缘设备上的数据访问和持久性进行了优化。使用 SDK 构建数据驱动的移动、边缘、Web、桌面和物联网(IoT)应用程序。

将 Realm 数据库视为 Atlas Device SDKs 的持久层可能会有所帮助。

功能

  • 移动优先: Realm 是第一个从头开始构建的可直接在手机、平板电脑和可穿戴设备中运行的数据库。
  • 简单:数据直接作为对象公开可通过代码进行查询,从而无需使用充满性能和维护问题的 ORM。
  • 现代:数据库支持关系、泛型和矢量化。
  • 快速:在执行常见操作时,它甚至比原始 SQLite 还要快,同时保持了极其丰富的功能集。
  • MongoDB Atlas Device Sync :轻松实现跨用户、设备和后端的数据实时同步。 免费开始使用模板应用程序创建云后端

开始体验

请参阅我们的文档中的详细说明,了解如何使用适用于 Node.jsAtlas Device SDK 和适用于 React Native 的 Atlas Device SDK 。 请注意,目前仅支持 Node.js 18 或更高版本。 对于 React Native 用户,我们提供了一个兼容性矩阵,显示了支持哪些版本。

文档

适用于 React Native 和 Node.js 的 Atlas Device SDK

有关适用于 React Native 的 Atlas Device SDK 的文档,请访问mongodb.com/zh-cn/docs/atlas/device-sdks/sdk/react-native/ 。 有关适用于 Node.js 的 Atlas Device SDK 的文档,请访问mongodb.com/zh-cn/docs/atlas/device-sdks/sdk/node/

API 参考文档位于mongodb.com/zh-cn/docs/realm-sdks/js/latest/

如果您正在使用 React Native,另请查看@realm/react的 README,其中提供了 React 钩子,以便更轻松地使用 Realm。

TypeScript 模型

TypeScript是纯 JavaScript 的流行替代方案,因为它提供静态类型。 我们的 TypeScript 支持包括两部分

  • 准确的 TypeScript 定义@realm/babel-plugin ,用于将 TypeScript 类转换为 Realm 模式。 模型类的示例如下:
class Task extends Realm.Object<Task, "description"> {
_id = new Realm.BSON.ObjectId();
description!: string;
@index
isComplete = false;

static primaryKey = "_id";

constructor(realm, description: string) {
super(realm, { description });
}
}

与 React Native 集成

适用于 React Native 的 Atlas Device SDK 提供对象持久性和持久对象的高级查询功能。 使用@realm/react可以更轻松地与 React Native 集成。

模板应用程序

我们提供 TypeScript 模板来帮助您开始使用 Realm。 点击所需模板的链接,然后按照其中的说明快速启动并运行。

获取帮助

  • 需要代码方面的帮助? :在域 标签上查找以前的问题 — 或提出新问题。您还可以查看我们的社区论坛,在其中可以讨论有关如何操作的一般问题。
  • 有错误要报告? 提出问题。 如果可能,请包含 Realm 的版本、完整日志、Realm 文件以及显示问题的项目。
  • 有功能请求? 提出问题。 告诉我们该功能应该做什么,以及为什么需要该功能。

贡献

有关更多详细信息,请参阅CONTRIBUTING.md

已知问题

  • Realm 与旧版 Chrome 调试器不兼容。 支持以下调试方法:
    • Hermes 调试器是调试现代 React Native 应用程序的推荐方法。
    • Safari也有类似的功能集,但需要一些设置,并且仅支持在 iOS 中进行调试。
    • 注意:对于上述方法,无需在“调试”菜单中启用Debug with Chrome

构建 SDK

有关从源代码构建 SDK 的说明,请参阅Building.md文件。

对缺少的二进制文件进行故障排除

安装并运行 Realm 后,有可能会遇到错误Could not find the Realm binary 。 以下是一些有助于解决此问题的提示。

兼容性

请咨询我们的COMPATIBILITY.md ,确保您运行的realm版本与受支持的nodereact-nativeexpo版本兼容。

ReactNative

iOS 版

通常,当 Pod 依赖项尚未更新时,会出现此错误。 尝试运行以下命令:

npx pod-install

如果仍然没有帮助,则可能是您的构建或 pod 依赖项存在一些缓存错误。 可以使用以下命令安全地清除这些缓存:

rm -rf ios/Pods
rm ios/Podfile.lock
rm -rf ~/Library/Developer/Xcode/DerivedData

然后,重新安装 Pod 并重试。 如果仍然不起作用,请确保prebuilds/apple/realm-core.xcframework目录存在并包含适用于您的平台和架构的二进制文件。 如果缺失,请尝试重新安装realm npm包和 CocoaPods。

Android

安装realm且未执行全新构建时,可能会出现这种情况。 可以使用以下命令清除缓存:

cd android
./gradlew clean

然后,尝试为 Android 重新构建。 如果仍然遇到问题,请确保node_moduels/realm/react-native/android/src/main/jniLibs包含适用于您的架构的 域 二进制文件。如果缺失,请尝试重新安装realm npm 包。

Expo

如果您正在使用 Expo,一个常见的陷阱是未安装expo-dev-client并使用特定于开发客户端的脚本在 Expo 中构建和运行您的 React Native 项目。 开发客户端允许您创建 Expo Go 的本地版本,其中包括 Realm 等第三方库。 如果您想在 Expo 项目中使用realm ,以下步骤可能会有所帮助。

  • 安装expo-dev-client
    npm install expo-dev-client
    
  • 构建适用于 iOS 的开发客户端
    npx expo run:ios
    
  • 构建适用于 Android 的开发客户端
    npx expo run:android
    
  • 启动捆绑器而不构建
    npx expo start --dev-client
    

节点/Electron

运行npm install realm时,检测到的架构的域二进制文件会下载到node_modules/realm/prebuilds中。如果此目录缺失或为空,请确保安装时没有报告任何网络问题。

分析

异步向 Realm 提交安装信息。

我们为什么要这样做? 简而言之,因为它有助于我们为您打造更好的产品。 这些数据不会识别您、您的雇主或您的应用的个人身份,但有助于我们了解您使用的语言、您的目标 Node.js 版本等。 掌握这些信息将有助于安排时间优先顺序,添加新功能和弃用旧功能。 收集匿名应用程序路径和匿名机器标识符是我们准确计算其他指标实际使用情况的唯一方法。 如果我们没有办法对报告的信息去重,那么报告就毫无用处,因为单个开发者npm install (运行同一应用 10 次)报告的内容比另一个仅安装一次应用的开发者多 10 倍,从而使数据全部但没用。 除非有必要,否则没有人喜欢共享数据,我们明白这一点,并且我们已经就是否添加此内容进行了很长时间的争论。 如果您确实觉得有必要不将此数据发送回 Realm,那么您可以设置一个名为REALM_DISABLE_ANALYTICS的环境变量。

目前已报告以下信息:

  • 正在安装哪个版本的 Realm。
  • 正在使用的操作系统平台和版本。
  • 是否使用 JavaScript 框架(当前为 React Native 和 Electron)及其版本。
  • 正在使用哪个 JavaScript 引擎。
  • Node.js 版本号。
  • TypeScript 版本(如果使用)。
  • 用于聚合其他信息的匿名计算机标识符和哈希应用程序名称。

此外,我们无条件地将各种常量写入可能在运行时使用的文件。

Code of Conduct

该项目遵守MongoDB 行为准则。 参与即表示您遵守本准则。 请将不可接受的行为发送至Community-conduct@mongodb.com

许可证

Realm JS 和Realm Core根据 Apache 许可证 2.0 发布。

反馈

如果您使用 Realm 并对它感到满意,我们只希望您考虑发送一条提及@realm的推文来分享您的想法

如果您不喜欢它,请告诉我们您希望改进什么,以便我们修复它!

贡献者

使用contrib.rocks制作。

使用TypeDoc生成