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

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

admin2周前 (04-05)AI技术17

前端进阶技巧:本文深入解析

嵌套文档更合理:单活动专属规则直接存 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,超出就报错提示运营配置异常。

相关文章

什么是LLM?看这一篇就够了!

一、全套AGI大模型学习路线 AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能! 二、640套AI大模型报告合集 这套包含640份报告的合集,涵盖了AI大...

神经网络中的单层神经网络

神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术。人脑中的神经网络是一个非常复杂的组织。成人的大脑中估计有1000亿个神经元之多。 看一个经典的神经网络。这是一个包...

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

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

什么是人工智能 ?

您可以使用 ML 训练 AI,使其精确、快速地执行任务。这可以通过自动化员工感到吃力或厌烦的业务部分来提高运营效率。同样,您可以使用 AI 自动化来腾出员工资源,用于更复杂和更具创造性的工作。...

前端开发实战详解:骡子快跑怎么注册账号 骡子快跑账号注册流程最佳实践|Duuu笔记

骡子快跑注册仅需1分钟,但激活码需从Discord指定频道获取,输错3次将锁账户24小时;积分与注册邮箱强绑定且不可更换;部分地区即使注册成功也无法运行Agent。 ☞☞☞AI 智能聊天, 问答助手...

从入门到精通:前端开发之骡子快跑支持热点借势吗 骡子快跑节日营销文案生成|Duuu笔记

骡子快跑平台提供五步节日营销文案生成路径:一、调用内置32个节日模板库;二、输入热点事件触发动态生成;三、绑定自有素材库实现个性化延展;四、多角色视角协同输出;五、接入微信生态直发并校验合规性。 ☞...

发表评论

访客

看不清,换一张

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