MongoDB查询构建:筛选符合时间与时区条件的优惠码
MongoDB优惠码查询构建方案
查询逻辑拆解
要满足需求,查询需覆盖两种优惠码类型:
- 不可过期优惠码(
isExpirable: false):直接筛选返回 - 可过期优惠码(
isExpirable: true):需同时满足三个条件:availability数组中存在匹配指定时区的元素- 传入的时间戳大于等于该元素的
startTimestamp - 传入的时间戳小于等于该元素的
endTimestamp
具体查询语句
假设传入参数为:
- 时间戳:
1628290101 - 时区:
'America/New_York'
对应的MongoDB查询代码如下:
db.promoCodes.find( { $or: [ // 匹配不可过期优惠码 { isExpirable: false }, // 匹配符合时间条件的可过期优惠码 { isExpirable: true, availability: { $elemMatch: { timezone: 'America/New_York', startTimestamp: { $lte: 1628290101 }, endTimestamp: { $gte: 1628290101 } } } } ] }, // 指定返回字段,排除默认的_id { promoCode: 1, country: 1, _id: 0 } )
代码说明
$or操作符:将两种优惠码的筛选条件组合起来,满足任一条件即可匹配$elemMatch操作符:确保availability数组中存在同时满足时区匹配、时间戳在有效期范围内的元素- 投影参数:仅返回
promoCode和country字段,去掉不需要的字段
内容的提问来源于stack exchange,提问作者Saswat
相关产品推荐
相关产品推荐

