Mongodb按日期和聚合管道过滤器

zdwk9cvp  于 2023-06-29  发布在  Go
关注(0)|答案(1)|浏览(97)

我试图过滤数据为过去一个月和聚合的基础上类别列。

end_date = datetime.now()
    start_date = end_date - timedelta(days=30)
    filter_query = {
        'load_date': {
            '$gte': start_date,
            '$lte': end_date
        }
    }

    count = await collection.count_documents(filter_query)
    print(count) # gives correct count

    pipeline = [
        {'$match': {'load_date': filter_query}}, 
        {'$group': {'_id': '$category', 'count': {'$sum': 1}}}
    ]
    items = collection.aggregate(pipeline)
    category = await items.to_list(limit)

    return {"total_items": count, "items": category}

过滤后的计数给出正确的结果。如果我没有在管道中通过时间过滤器{'$match': {'load_date': filter_query}},则group by category可以工作。但是当我在管道中添加两者时,我只得到total_items。Category返回空数组。

sy5wg1nm

sy5wg1nm1#

在后一个过滤器中,您意外地双重嵌套了'load_date'两次:

> filter_query
{ load_date: { '$gte': 1, '$lte': 2 } }
> match
{ '$match': { load_date: { load_date: { '$gte': 1, '$lte': 2 } } } }
>

因此,解决方案是将$match的定义从

{'$match': {'load_date': filter_query}},

{'$match': filter_query},

相关问题