按优先级筛选指定数量用户的MongoDB高性能查询方案探讨
问题背景与需求
假设MongoDB聚合中的$$NOW变量值为2023-01-29T00:30:48.370+00:00,现有MongoDB记录如下:
[数据代码保持原样]
需要从上述数据中获取最多3条(或指定数量)结果,需严格遵循以下优先级规则:
- 优先级1:随机选择注册时间小于24小时的用户,最多返回2条记录;
- 优先级2:从剩余名额(总名额减去条件1返回的数量)中,随机选择过去7天内登录且注册时间超过24小时的用户;
- 优先级3:仅当前两个条件未凑够总名额时,从剩余名额中随机选择过去8-15天内登录的用户;
- 优先级4:若前3个条件仍未凑够总名额,随机选择其他任意用户。
预期结果示例如下:
[结果代码保持原样]
现有实现与疑问
我已实现以下聚合查询,能返回符合预期的结果:
[查询代码保持原样]
但存在以下疑问:
- 是否有更高效的实现方式?
- 当数据量达到百万级时,该查询的性能能否保持良好?
- 当前方案是否已是最优解?
内容的提问来源于stack exchange,提问作者mahendra
相关产品推荐
相关产品推荐

