十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Meteor 应用软删除实战:jam:soft-delete 包的安装、用法与配置全指南

Meteor 应用软删除实战:jam:soft-delete 包的安装、用法与配置全指南 后端前端开发工具移动开发【免费下载链接】meteorMeteor, the JavaScript App Platform项目地址https://gitcode.com/gh_mirrors/me/meteor点击查看免费下载软删除Soft Delete是指删除数据时不真正从数据库移除记录而是通过打标记的方式将其隐藏从而保留审计轨迹、支持数据恢复。jam:soft-delete是 Meteor 生态中一个零配置、同构Isomorphic的软删除社区包它自动覆盖removeAsync、自动为查询注入过滤条件并额外提供softRemoveAsync、recoverAsync等便捷方法。读完本文你将掌握该包的安装步骤、永久删除与显式软删除的完整用法、可恢复机制以及全局配置项的全部细节并能结合 Meteor 集合 API 的源码实现理解其底层工作原理。这个包是什么jam:soft-delete为 Meteor 应用提供了一键式的软删除能力。其核心特性如下零配置开箱即用同时支持按需定制同构Isomorphic客户端与服务端行为一致天然配合 Meteor 的 Optimistic UI乐观 UI体验自动覆盖removeAsync将原本物理删除的调用转化为软删除自动处理新增与查询在insertAsync时自动附加软删除标记字段并自动为.find等查询追加过滤条件无需修改任何现有查询代码提供recoverAsync集合方法一键恢复被软删除的文档提供softRemoveAsync集合方法需要显式软删除时的可选用法可选deletedAt时间戳为文档附加删除时间字段可选排除指定集合某些集合如角色表保持物理删除兼容性支持 Meteor2.8.1与3.0。注意软删除的另一种替代方案是把文档归档到专门的归档集合。若你倾向归档方案可使用jam:archive包。建议对比两种方案后为你的应用选择最合适的一种。从社区包索引 index.md 可以看到jam:soft-delete被归类在 MongoDB collection extensionsMongoDB 集合扩展类别下同类的还有jam:archive与jam:mongo-transactions均由社区开发者维护。如何安装在应用根目录执行meteor add jam:soft-delete该包由社区开发者 Jam 维护可在 soft-delete 文档 顶部查看维护者信息源码托管在其 GitHub 仓库。如何使用安装完成后包的默认行为会自动生效你的现有代码几乎不需要改动。永久删除物理删除默认情况下该包会覆盖集合的removeAsync方法使其只打软删除标记而不会真正删除文档。如果确实需要从数据库中永久移除请传入soft: false选项Collection.removeAsync(/* your filter */, { soft: false });如果你不希望覆盖removeAsync的行为可以设置overrideRemove: false详见下文 配置可选 一节。显式软删除如果你倾向在代码中明确表达这是一次软删除可以使用softRemoveAsyncCollection.softRemoveAsync(/* your filter */);恢复被软删除的文档要恢复一条或多条被软删除的文档使用recoverAsyncCollection.recoverAsync(/* your filter */);这三个方法均接受与removeAsync一致的过滤器selector可用于按_id、按条件批量操作等场景。配置可选如果你满意默认行为则完全无需任何配置。但该包在默认值之外仍保留了相当大的灵活性。全局默认配置如下const config { deleted: deleted, // 布尔标记字段名可按需修改例如改为 isDeleted deletedAt: , // 如需在文档上记录删除时间戳在此填写字段名例如 deletedAt autoFilter: true, // 自动为查询追加 { [deleted]: false } 过滤条件 overrideRemove: true, // 覆盖 Collection.removeAsync 方法将其变为软删除 exclude: [roles, role-assignment] // 排除使用软删除的集合默认排除 meteor roles 包创建的集合 };各配置项的作用与建议如下配置项默认值说明deleteddeleted软删除布尔标记字段名。改动后所有自动注入的查询条件与标记逻辑都会跟随新字段名。deletedAt空字符串即不启用填入字段名如deletedAt后软删除时会自动为该文档写入删除时间戳。autoFiltertrue是否自动为.find等查询注入{ deleted: false }过滤条件使被删文档默认不可见。overrideRemovetrue是否覆盖removeAsync。设为false后removeAsync恢复为物理删除。exclude[roles, role-assignment]命中这些名称的集合不启用软删除删除时仍为物理删除。默认排除 meteor roles 包创建的集合避免影响权限数据。修改全局默认值的方式如下// 放在一个同时被客户端和服务端导入的文件中 import { SoftDelete } from meteor/jam:soft-delete; SoftDelete.configure({ // ... 在此修改默认配置 ... // });配置时请注意该配置调用必须放置在同时被客户端和服务端导入的文件里以保证两端行为一致这也是同构包的基本要求若你已使用aldeed:collection2或jam:easy-schema这类自动校验写入的包软删除标记字段最好同步纳入你的 schema 定义以免校验拦截exclude中的集合名是集合在 Mongo 中的实际名称即new Mongo.Collection(roles)中的roles。底层原理为什么能做到零改动要理解该包为何能自动生效需要先了解 Meteor 集合的*Async方法族。Meteor 从2.8.1起引入了 Promise 风格的异步集合方法insertAsync、removeAsync、updateAsync等与同步版insert、remove、update并存且旧的同步写法在服务端已标记为 deprecated。这一点可以从 mongo.d.ts 的类型声明中看到insert(doc, callback?)被标注为deprecated on server since 2.8并注明see insertAsyncremove(selector, callback?)同样被标注 deprecated指向removeAsyncinsertAsync(doc, callback?)返回Promisestring新文档的_idremoveAsync(selector, callback?)返回Promisenumber删除影响的文档数。在实现层面methods_async.js 中insertAsync经由_insertAsync完成 _id 生成、远端集合客户端走 DDP 方法调用、本地集合直接下钻到 driver 的逻辑而 removeAsync 则先通过Mongo.Collection._rewriteSelector重写选择器再区分远端与本地集合分别处理。正是这种集合方法即调用点的架构使得jam:soft-delete可以通过覆盖removeAsync、insertAsync与查询过滤器来拦截全部读写路径——这也是它能做到不改任何查询代码的根基。从代码结构可以推断该包的典型实现思路是覆盖removeAsync当overrideRemove: true时removeAsync(selector)不再执行物理删除而是转为对匹配文档执行一次update将deleted字段置为true若配置了deletedAt则一并写入时间戳insertAsync附加默认标记新插入的文档会自动带上{ deleted: false }保证所有文档都拥有一致的标记字段查询过滤才成立查询过滤器注入当autoFilter: true时包会拦截.find/.findOne等查询的 selector自动追加{ deleted: false }从而让被软删除的文档对业务查询隐形softRemoveAsync与recoverAsync分别是对上述软删除操作与反向恢复操作的显式封装recoverAsync将匹配文档的deleted重置为false或移除标记使文档重新出现在常规查询结果中。需要强调的是上述第 24 点的具体实现细节在仓库内以jam:soft-delete包源码为准从本仓库现有资料可以确证的是Meteor 集合的*Async方法族含removeAsync、insertAsync是包被覆盖的挂载点且其 Promise 返回约定insertAsync返回新文档_id、removeAsync返回受影响文档数定义了各方法之间相互协作的接口形态。关于兼容性说明文档明确声明该包兼容 Meteor2.8.1与3.0这与 Meteor 的*Async方法族引入时间2.8.1完全吻合——包的默认行为依赖这些异步方法的存在。若你的应用仍停留在2.8.1之前的版本需要先升级 Meteor 再使用本包。与其他社区包的配合jam:soft-delete并非孤立存在它与 Jam 系列的其他包可以协同工作jam:archive归档方案的替代选择。若你的业务更看重移除原集合、归入归档集合的形态可参考 archive.md两者的安装、显式删除archiveAsyncvssoftRemoveAsync、恢复restoreAsyncvsrecoverAsync接口几乎一一对应便于在两种方案间切换jam:offline离线能力包在其数据同步与对账逻辑中明确假设应用的删除机制是归档或软删除二者之一。若采用软删除方案offline 包默认按{ deleted: false }过滤待保留数据若你自定义了软删除标记字段名则需要在 offline 包的filter中同步调整。详见 offline.md 中的说明。小结jam:soft-delete以极低的接入成本meteor add jam:soft-delete即可为 Meteor 应用提供完整的软删除能力默认覆盖removeAsync、自动注入查询过滤、提供显式的softRemoveAsync与恢复用的recoverAsync并通过deleted、deletedAt、autoFilter、overrideRemove、exclude五个全局配置项兼顾灵活性。其同构特性与 Meteor 2.8.1 的*Async方法族深度绑定是希望在保留数据的同时获得删除可撤销能力的 Meteor 应用的轻量级选择。赞分享后端前端开发工具移动开发【免费下载链接】meteorMeteor, the JavaScript App Platform项目地址https://gitcode.com/gh_mirrors/me/meteor点击查看免费下载相关推荐探索数据伪造的艺术ngneat/falso探索数据伪造的艺术ngneat/falso 引言为什么我们需要伪造数据 在现代软件开发中测试数据生成是一个不可或缺的环节。无论是单元测试、集成测试还是数据库时序数据库物联网大数据实时分析云原生AWS CLI 删除 API Gateway REST API 实战指南delete-rest-api 命令的用法、原理与安全删除流程AWS CLI 删除 API Gateway REST API 实战指南 delete rest api 命令的用法、原理与安全删除流程 导读 本文以 aws开发工具云原生运维aws-cli 实战指南使用 aws autoscaling delete-launch-configuration 安全删除 EC2 Auto Scaling 启动配置aws cli 实战指南使用 aws autoscaling delete launch configuration 安全删除 EC2 Auto Scalin开发工具云原生运维上一篇从入门到精通formattable的7个实用函数与10个常见问题下一篇3步打造专业PDF模板PDFKit页眉页脚与背景设计指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表