【发布时间】:2020-11-01 09:01:15
【问题描述】:
我的 mongo DB 有一个具有以下结构的文档:
{'vname':'x', 'pname': 'xyz', 'price': '10000'}
我想获取与pname='xy' 匹配的所有文档,然后按vname 分组,并将每个vname 的结果限制为4。
pipeline = [
{
'$facet': {
'v1': [
{
'$match': {'vname': 'v1'}
},
{
'$sort': {'price': 1}
},
{
'$limit': 4
}
],
'v2': [
{
'$match': {'vname': 'v2'}
},
{
'$sort': {'price': 1}
},
{
'$limit': 4
}
]
}
}
]
docs = Pinfo.objects(pname__icontains='xy').aggregate(pipeline=pipeline)
我看到的另一种方法是为每个vname 多次运行过滤器查询
docs = Pinfo.objects.filter(Q(pname__icontains='xy')&Q(vname__exact='v1')).limit(4)
还有其他方法可以达到同样的效果吗? 使用聚合和管道方法是否更好?
【问题讨论】:
标签: mongodb aggregation-framework mongoengine