当前位置:首页 > AI技术 > 正文内容

前端开发 MongoDB优惠活动规则配置怎么存 表达式与条件树内嵌|Duuu笔记

admin7个月前 (04-01)AI技术197

嵌套文档更合理:单活动专属规则直接存 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

白瓜AI,一个免费图文AI创作工具,支持 AI 仿写,图文生成,敏感词检测,图片去水印等等。

下载

白名单字段投影:执行前只把允许访问的字段扁平化注入一个干净对象,如

{ order_amount: 199, user_level: 3, sku_category: "electronics" }

,表达式只能读这些 key

沙箱函数封装:用

get("user.level")

或

ctx("order.items.0.price")

这类受限访问函数,内部做路径校验和类型兜底,不暴露原始对象

绝对不要在 MongoDB 查询里用

$where

执行用户传入的 JS 表达式——它会全库扫描、无法索引,且有执行任意代码风险

性能和索引怎么配合条件树生效

条件树本身没法建索引,但高频过滤字段可以单独拎出来冗余存储。比如一个满减规则常看

order_amount

和

user.tier

,就在活动文档里加两个字段:

min_order_amount: 100

、

required_user_tier: "gold"

,然后对它们建复合索引:

db.promotions.createIndex({ "min_order_amount": 1, "required_user_tier": 1, "status": 1 })

这样查“当前可用的满减活动”时先走索引快速筛选,再对结果集逐个执行完整条件树判断。容易忽略的是:如果条件树里有

IN

或

REGEX

这类低效操作,得在应用层加缓存或预计算,MongoDB 本身扛不住实时遍历。

树越深、节点越多,执行耗时越不可控;线上建议限制最大深度为 4,单节点条件数不超过 8,超出就报错提示运营配置异常。

相关文章

推荐10个AI人工智能技术网站

除了研究和开发人工智能技术,OpenAI还积极参与人工智能伦理和安全的研究和探讨。 认为,人工智能技术的发展必须遵循伦理和法律的规范,以确保人工智能的应用不会对人类带来负面影响。...

跨平台机器学习:ML.NET架构及应用编程

平台上的一个机器学习框架,它提供了一套丰富的算法和工具,使得开发人员可以轻松地构建和部署机器学习模型。支持多种编程语言,包括等,这使得它成为跨平台机器学习的理想选择。的架构主要包括三个部分:数据读取、...

AI高级应用:Perplexity 怎么写用户手册 Perplexity 产品帮助文档生成【技术】实战案例|Duuu笔记

Perplexity AI用户手册需基于API元数据、真实UI截图、典型场景示例、响应字段解析及动态调试指令五步构建:一调用API获取参数与错误码;二标注网页端搜索框、引用图标等组件;三设计信息检索、...

深入理解前端开发:零基础教程:怎么用 Gemini 自动生成短视频脚本与拍摄大纲完全指南|Duuu笔记

需明确输入指令、理解输出逻辑并合理拆解内容:一、构建含角色/任务/格式等要素的提示词;二、追加分镜与时间轴约束优化专业性;三、转译为带道具编号与颜色标记的执行清单;四、用Gemini校验注意力断点并迭...

前端开发实战详解:骡子快跑如何生成会议纪要 骡子快跑语音转文字整理技巧最佳实践|Duuu笔记

使用听脑AI转写、骡子快跑生成纪要、影子跟读校验、自定义术语词典及EcomGPT-CNN情绪风险分析,五步实现会议纪要高效精准产出。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量...

深入理解AI:避坑实战:如何纠正 在执行 Prompt 时的幻觉与逻辑错误完全指南|Duuu笔记

有效纠偏AI幻觉的关键在于任务设计源头切断错误条件:明确角色权限禁令、硬性规定输出格式、使用精确动词、分步推理并嵌入检查点、提供带纠错痕迹的小样本示例、设置输出自检环节。 ☞☞☞AI 智能聊天, 问...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。