查询集聚合管道:构建像MongoDB一样的链式聚合查询
借鉴NoSQL的聚合管道思想,在Django ORM上创建一组可组合的聚合步骤(筛选、分组、投影、排序),通过<code>|</code>运算符链式调用,最终生成高效SQL,简化复杂报表查询。 · 难度:入门 · +10XP
查询集聚合管道
设计一个AggregationPipeline类,每个步骤如Filter、Group、Project都是独立的变换器。使用__or__运算符连接步骤,内部依次修改查询集的.annotate()和.values()。支持动态字段推导和子查询嵌套。示例:Pipeline() | Filter(price__gt=100) | Group('category') | Avg('rating')。
class AggregationPipeline:
def __init__(self):
self.steps = []
def __or__(self, step):
self.steps.append(step)
return self
def execute(self, queryset):
for step in self.steps:
queryset = step.apply(queryset)
return queryset
class Filter:
def __init__(self, **kwargs):
self.kwargs = kwargs
def apply(self, qs):
return qs.filter(**self.kwargs)