RxDB MongoDB RxStorage 实战:让 MongoDB 成为本地优先数据库的存储引擎
数据库NoSQL嵌入式数据库实时数据库【免费下载链接】rxdbThe local-first database that runs on every JS runtime and replicates with your existing backend - no vendor, no lock-in - https://rxdb.info/项目地址https://gitcode.com/gh_mirrors/rx/rxdb点击查看免费下载MongoDB RxStorage 是 RxDB 官方提供的一种 RxStorage 实现它允许你使用 MongoDB 作为 RxDB 数据库的底层存储引擎从而同时获得 MongoDB 的成熟生态与可扩展性以及 RxDB 的实时同步能力。读完本文你将掌握 MongoDB RxStorage 的安装接入方式、连接串配置、已知限制与源码级工作原理并了解它如何与 MongoDB 复制插件配合构建完整的实时同步方案。什么是 MongoDB RxStorageRxDB 本身并不是一个自包含的数据库它把数据真正存放的位置抽象为 RxStorage 接口。通过切换不同的 RxStorage 实现RxDB 可以在浏览器、Node.js、React Native 等不同 JavaScript 运行时上使用完全不同的底层存储。MongoDB RxStorage 就是其中的一种服务端实现它通过 MongoDB 官方的 Node.js 驱动mongodb包把 RxDB 的文档、索引、变更事件等全部落地到 MongoDB 中。该存储被设计为可与任何形态的 MongoDB 配合工作普通的 MongoDB Server独立部署MongoDB Replica Set副本集Sharded MongoDB Cluster分片集群Atlas Cloud Database云数据库。这意味着无论你的基础设施是自建机房还是云上托管都可以把 MongoDB 作为 RxDB 的持久化层。需要说明的是由于浏览器和移动端无法直接使用 MongoDB 的 wire protocol 连接副本集MongoDB RxStorage 主要用于 Node.js 服务端场景。当前版本的已知限制在把 MongoDB RxStorage 引入生产环境之前务必先了解它的三条边界与 RxAttachment 等功能的取舍有关多 Node.js 服务器共享同一个 MongoDB 数据库目前不受支持。从源码看实例的变更事件通过进程内的Subject广播见 rx-storage-instance-mongodb.ts 中的changes$跨进程的 MongoDB Change Stream 监听代码在源码中被注释掉并标注为可能的 premium 功能因此多服务器场景下的变更传播无法保证。RxAttachments附件目前不受支持。存储实例的构造函数会对 schema 进行校验一旦检测到schema.attachments存在就直接抛出错误attachments not supported in mongodb storage, make a PR if you need thatgetAttachmentData方法同样直接抛错。不支持在 MongoDB 上做非 RxDB 的写入。RxDB 期望所有写入都经由自身完成并维护所需的元数据如_rev、_deleted、_meta.lwt外部直接写入会破坏 RxDatabase 的一致性导致未定义行为。但你可以随时从外部对 MongoDB 存储执行只读查询这不会影响 RxDB 的正常工作。快速上手把 RxDB 接入 MongoDB使用 MongoDB RxStorage 只需两个步骤。第一步安装 mongodb 驱动包npm install mongodb --savemongodb是 MongoDB 官方的 Node.js 驱动。在本仓库中它被声明为mongodb的依赖项package.json 中为mongodb: ^6.21.0 || ^7.0.0同时也是 RxDB 自身运行 MongoDB 相关测试和脚本时使用的驱动版本。第二步创建 RxDatabase 时启用 MongoDB RxStorageimport { createRxDatabase } from rxdb; import { getRxStorageMongoDB } from rxdb/plugins/storage-mongodb; const myRxDatabase await createRxDatabase({ name: exampledb, storage: getRxStorageMongoDB({ /** * MongoDB connection string * link https://www.mongodb.com/docs/manual/reference/connection-string/ */ connection: mongodb://localhost:27017,localhost:27018,localhost:27019 }) });核心要点getRxStorageMongoDB从rxdb/plugins/storage-mongodb子路径导入该导出在 package.json 的./plugins/storage-mongodb映射中同时提供了require、import两种格式connection参数接收标准的 MongoDB 连接字符串示例中的多主机地址localhost:27017,27018,27019对应一个三节点副本集返回的RxStorageMongoDB实例实现了 RxDB 的RxStorage接口在 rx-storage-mongodb.ts 中可以看到它通过createStorageInstance创建真实的存储实例并在创建前调用ensureRxStorageInstanceParamsAreCorrect校验参数。connection之外的完整设置项定义在 mongodb-types.tsexport type MongoDBDatabaseSettings { connection: MongoDBConnectionString; // 例如 mongodb://localhost:27017 transactionOptions?: TransactionOptions; // 可选MongoDB 驱动的事务选项 };源码级原理MongoDB RxStorage 是如何工作的理解底层实现有助于你在遇到问题时快速定位也能帮助你评估它在生产环境中的行为。文档存储与_id字段替换MongoDB 使用_id作为默认主键且其生成规则与 RxDB 的主键语义不同。为了不冲突当 RxDB schema 的主键字段名为_id时存储层会把它替换为内部字段__id常量MONGO_ID_SUBSTITUTE_FIELDNAME定义于 mongodb-helper.ts。写入时swapRxDocToMongo把_id改名为__id读取时swapMongoToRxDoc再把它还原为_id查询与排序条件也会做同样的转换primarySwapMongoDBQuerySelector、swapToMongoSort。集合命名与索引创建每个 RxDB 存储实例会连接到名为databaseName -v schema.version的数据库例如exampledb-v0集合名即为 collectionName。实例创建时会自动createCollection创建集合把 schema 中的indexes数组展开并为每个索引追加主键索引然后调用createIndexes建立 MongoDB 索引索引名由字段名以|连接而成见getMongoDBIndexName。因此你无需手工维护 MongoDB 侧索引schema 定义即可驱动索引结构。写入与冲突检测由于 MongoDB 不支持跨文档事务源码注释中明确说明RxDB 采用先比较前序版本再更新的策略来保证一致性插入通过findOneAndUpdate配合$setOnInsert与upsert: true实现不存在才插入若文档已存在则产生一个status: 409的RxStorageWriteErrorConflict冲突错误更新通过findOneAndReplace查询条件中同时带上_rev前序修订号只有版本匹配才会替换成功若失败则重新读取当前文档并返回冲突错误。所有写操作通过writeQueue串行排队执行避免并发写互相踩踏详见 rx-storage-instance-mongodb.ts 的bulkWrite实现。这与 RxDB 的修订号revision机制一脉相承确保了在无事务支持的 MongoDB 上也能可靠地检出写冲突。查询、计数与清理查询RxDB 的 Mango 查询会被prepareMongoDBQuery转换为 MongoDB 的 selector 与 sort再依次应用skip、limit、sort最终把结果逐条swapMongoToRxDoc还原为 RxDB 文档格式计数直接使用countDocuments并返回mode: fast清理cleanup通过deleteMany删除_deleted: true且_meta.lwt早于now() - minimumDeletedTime的墓碑文档这是 RxDB 清理机制Cleanup在 MongoDB 上的落地实现。客户端连接管理getMongoDBClient/closeMongoDBClient见 mongodb-helper.ts维护了一个按连接串为 key 的MONGO_CLIENT_CACHE对同一个连接串复用MongoClient实例并以引用计数管理生命周期引用归零后延迟 2 秒再真正关闭连接以便短期复用场景避免反复建连。连接时还会通过driverInfo把驱动标识标记为RxDB及对应版本便于在 MongoDB 侧观察流量来源。与 MongoDB 复制插件的关系MongoDB RxStorage 解决的是数据存在哪而 MongoDB 复制插件解决的是数据如何与其他服务同步。两者可以独立使用也可以组合复制插件基于 MongoDB Change Stream 实现双向实时同步其客户端通过 RxServer 的复制端点与 MongoDB 通信而 MongoDB RxStorage 则适合在 Node.js 服务端把 MongoDB 直接作为 RxDB 的存储引擎。组合使用时你可以让 RxDB 直接读写 MongoDB再借助复制插件把变更分发到其他客户端或系统。测试与本地运行仓库内置了 MongoDB 相关的完整测试与运维脚本见 package.json启动本地 MongoDB 副本集基于 Dockermongo 8.0.4npm run mongodb:start该命令启动三个端口27017/27018/27019并以--replSet rs0模式运行与文档示例中的三主机连接串对应。停止命令为npm run mongodb:stop。连接自检node ./config/mongodb-connection-tester.jsconfig/mongodb-connection-tester.js会等待容器启动、初始化副本集并等待主节点就绪后执行一次插入供 CI 判断数据库是否可用运行测试npm run test:node:mongodb # 以 mongodb 为默认存储运行 Node 端单元测试 npm run test:fast:mongodb # 快速模式测试跳过 init 测试 npm run test:performance:mongodb测试配置位于 test/unit/config.ts其中 MongoDB 存储的测试连接串为mongodb://localhost:27017/?directConnectiontrue并标注了该存储的测试能力矩阵hasPersistence: true、hasMultiInstance: false、hasAttachments: false、hasReplication: true——这与上文列出的限制完全一致也是你评估功能覆盖范围的最直接依据。生产使用建议综合文档与源码接入 MongoDB RxStorage 时有几点值得注意确保 MongoDB 可用性写入依赖findOneAndReplace与 upsert 语义请确保使用的 MongoDB 版本支持这些操作副本集模式下建议在连接串中配置多个节点以提升容错。外部只读、内部独占写让所有写入都经由 RxDB 完成外部系统如需读取数据可直接查询 MongoDB但不要绕过 RxDB 直接修改文档否则会破坏_rev与元数据的一致性。避开不支持的子集当前版本不要使用 attachments schema 字段也不要部署多 Node.js 实例共享同一 MongoDB 数据库这会绕开hasMultiInstance: false的边界。善用 schema 驱动索引索引由 RxDB 在集合创建时自动建立新增查询字段时先在 RxDB schema 的indexes中声明以保证查询性能。MongoDB RxStorage 让本地优先 服务端 MongoDB的架构成为可能客户端获得 RxDB 的响应式查询与离线能力服务端获得 MongoDB 的成熟存储与运维生态。结合上述限制与源码行为你可以据此判断它是否适合你的项目场景。赞分享数据库NoSQL嵌入式数据库实时数据库【免费下载链接】rxdbThe local-first database that runs on every JS runtime and replicates with your existing backend - no vendor, no lock-in - https://rxdb.info/项目地址https://gitcode.com/gh_mirrors/rx/rxdb点击查看免费下载相关推荐RxDB RxStorage 层详解为每种运行环境选择与组合最佳存储引擎RxDB RxStorage 层详解为每种运行环境选择与组合最佳存储引擎 RxStorage 是 RxDB 的存储抽象层它把「数据库内核」与「底层存储引擎」数据库NoSQL嵌入式数据库实时数据库RxDB Expo Filesystem RxStorage 实战指南让 React Native 数据库读写超越 SQLiteRxDB Expo Filesystem RxStorage 实战指南让 React Native 数据库读写超越 SQLite 本文以 RxDB 官方文档数据库NoSQL嵌入式数据库实时数据库F3D如何用极简工具实现专业级3D模型预览的完整指南F3D如何用极简工具实现专业级3D模型预览的完整指南 你是否曾为复杂的3D软件安装包而烦恼是否在寻找一款能快速预览各种格式3D模型的轻量级工具今天我将为你数据库NoSQL嵌入式数据库实时数据库上一篇开源项目推荐Windows Imaging Tools下一篇vCheck-vSphere 终极指南如何自动化监控VMware虚拟化环境创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

OneUptime Metrics Monitor 完整指南:基于 OpenTelemetry 的指标监控与按主机/容器分组告警

OneUptime Metrics Monitor 完整指南:基于 OpenTelemetry 的指标监控与按主机/容器分组告警

可观测性后端运维前端云原生微服务AI Agent 【免费下载链接】oneuptime Complete open-source monitoring and observability platform. 项目地址: https://gitcode.com/GitHub_Trending/on/oneuptime 点击查看 免费下载 本指南围绕 OneUptime 的 Metrics Monitor&…

2026/9/25 7:28:58 阅读更多 →
SvelteKit 路由清单确定性修复:为什么构建 manifest 时必须排序目录条目

SvelteKit 路由清单确定性修复:为什么构建 manifest 时必须排序目录条目

Web框架后端前端 【免费下载链接】kit web development, streamlined 项目地址: https://gitcode.com/gh_mirrors/kit/kit 点击查看 免费下载 导读 本文基于 SvelteKit 仓库中的变更记录(.changeset/pre/sort-manifest-readdir.md)与对应源…

2026/9/25 7:45:26 阅读更多 →
Python蔬菜销售预测可视化系统实战:从数据清洗到GUI联动

Python蔬菜销售预测可视化系统实战:从数据清洗到GUI联动

简介:基于Python的蔬菜产品销售预测可视化系统设计资源,面向具备Python基础、熟悉pandas、sklearn及Web框架的数据分析师和算法工程师,聚焦生鲜电商、连锁超市、批发市场等场景的销量预测与库存管理难题。资源以docx文档形式呈现,…

2026/9/25 13:25:16 阅读更多 →

最新新闻

SpringBoot+Vue 实现办公用品管理系统|计算机毕设源码讲解

SpringBoot+Vue 实现办公用品管理系统|计算机毕设源码讲解

💖💖作者:计算机毕业设计小明哥 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包…

2026/9/25 22:07:44 阅读更多 →
Python Assert 语句

Python Assert 语句

我们要去搞明白, 到底什么叫做断言。断言是程序里用来坚定地声明或表明某个事实的语句。比如在编一个除法的函数时, 你内心非常确定, 那个除数是不应该等于零的, 所以你就发出了断言, 说明这个除数不是零。断言仅仅只是一个布尔表达式, 它的作用是用来检查某个具体的条件有没有…

2026/9/25 22:07:44 阅读更多 →
阿里云 300万美金加入 Linux 基金会 Alibaba Cloud joins as a Founding Corporate Patron with $3 million

阿里云 300万美金加入 Linux 基金会 Alibaba Cloud joins as a Founding Corporate Patron with $3 million

阿里巴巴云正式加入 Omacom 基金会,成为创始企业赞助人,承诺每年出资 100 万美元,连续三年!这意味着总计 300 万美元的投入,与 DigitalOcean 的赞助金额持平,将全部用于 Omarchy 的开发、维护与推广。 但这…

2026/9/25 22:06:44 阅读更多 →
云服务器怎么搭建python环境变量管理系统

云服务器怎么搭建python环境变量管理系统

要搭建一个系统用来管理环境变量这事儿, 它并不是简简单单就能弄好的, 你首先得具备一定的基础知识储备, 并且还要有一定的编程实际操作经验才行;接下来这儿有一个非常基础的系统框架可以摆在你的面前供你看一看, 这个框架可不是固定不变的死规矩, 它是可以根据你自…

2026/9/25 22:06:44 阅读更多 →
提示词实测:剩菜太多不知道吃什么,让 AI 直接决定今晚菜单

提示词实测:剩菜太多不知道吃什么,让 AI 直接决定今晚菜单

冰箱里剩下一堆食材、又不想专门买菜时,晚上吃什么最头疼。我实测了一组提示词,把人数、食材、口味和时间限制一次性告诉 AI,让它直接决定菜单,而不是列一堆菜让我自己选。提示词的关键要求 提示词要求 AI 优先使用现有食材、根据…

2026/9/25 22:05:43 阅读更多 →
init_rootfs / shmem_init / init_ramfs_fs 函数

init_rootfs / shmem_init / init_ramfs_fs 函数

init_rootfs1. init_rootfs 函数1.1 shmem_init 函数1.2 init_ramfs_fs 函数1. init_rootfs 函数 通过 register_filesystem 函数,将新的rootfs文件系统插入到全局链表file_systems中 通过 init_ramfs_fs()->register_filesystem 函数,将一个新的ram…

2026/9/25 22:05:43 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/25 19:27:14 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/25 20:29:09 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/25 19:27:26 阅读更多 →