MongoDB优惠活动规则配置怎么存_表达式与条件树内嵌

张开发
2026/4/16 23:13:31 15 分钟阅读

分享文章

MongoDB优惠活动规则配置怎么存_表达式与条件树内嵌
嵌套文档更合理单活动专属规则直接存 promotions 文档的 rules 字段跨活动共享规则则拆至 promo_rules 集合用 rule_id 引用并加 version 灰度控制。优惠规则用嵌套文档还是单独集合直接存嵌套文档更合理尤其当规则和商品/活动生命周期强绑定时。MongoDB 的 document 天然支持树形结构把条件树塞进 conditions 字段里查活动时一并取出避免多次查询或 $lookup 关联。但要注意如果同一套规则被上百个活动复用或者规则本身频繁更新、需独立审计那就该拆到 promo_rules 集合里用 rule_id 引用——否则每次改规则都要批量更新所有活动文档容易写冲突或漏更新。单活动专属规则 → 嵌套在 promotions 文档的 rules 字段里跨活动共享规则 → 单独集合 ObjectId 引用加 version 字段做灰度控制规则字段名别叫 expression易误解为字符串脚本用 condition_tree 更准确条件树结构怎么设计才方便执行和调试别用纯字符串存表达式比如 price 100 user.level 2执行靠 JS eval 或服务端解析既慢又不安全。应该用可序列化的结构描述逻辑关系{ type: AND, children: [ { type: GT, field: order_amount, value: 100 }, { type: IN, field: user.tags, value: [vip, gold] } ]}这种结构能直接映射成后端 if 判断链也方便前端可视化编辑器渲染节点。注意几个坑field 路径要统一用点号分隔如 user.profile.age避免数组下标items.0.name导致匹配歧义叶子节点的 value 类型必须明确数字就存 Number字符串带引号布尔值用 true/false别混成字符串 true如果支持“当前时间比较”字段名别硬写 now用占位符 $NOW执行时再替换防止序列化时出错表达式里引用动态上下文字段怎么安全取值规则执行时需要读订单、用户、商品等上下文数据但不能让表达式任意访问对象属性比如 user.__proto__.constructor.eval(...)。推荐两种方式 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手依托大模型帮助用户记录、整理和分析音视频内容体验用大模型做音视频笔记、整理会议记录。

更多文章