使用flask mongoengine 在嵌入文档列表中按日期查询

问题描述

我与 flask-mongoengine 有此文档:

class AverageByDate(EmbeddedDocument):
    id = ObjectIdField(default=lambda: ObjectId())
    date = DateField(default=datetime.date.today(),required=True)
    average = FloatField(required=True)
    count = IntField(required=True)

class TopicEvaluationAverageMetric(Document):
    topic_id = IntField(primary_key=True,required=True)
    average_by_date = ListField(EmbeddedDocumentField(AverageByDate),required=True)

我想获取所有 TopicEvaluationAverageMetric 并按日期过滤,如下所示:

 average_by_date = list(filter(lambda x: x.date > a_week_ago.date(),sum([i.average_by_date for i in TopicEvaluationAverageMetric.objects()],[])))

上面的代码可以工作,但是不能很好地加载 TopicEvaluationAverageMetric.objects() 的所有数据库

我想在 TopicEvaluationAverageMetric 上的 average_by_date 列表中查询。我尝试使用 __match 或 mongoengine 聚合,但它们中的任何一个都适合我。

参考:https://github.com/MongoEngine/mongoengine/issues/1442 How to include only selected embedded document in mongoengine?

我怎样才能使这个过滤器更好? 我的目标是返回有关此模型的指标。

[编辑]

我正在尝试这样的事情:

    pipeline = [
    {
        "$match": {"$and": [{"average_by_date.date": {"$gt": a_week_ago}}]}
    },{
        "$addFields": {
            "average_by_date": {
                "$filter": {
                    "input": "$average_by_date","as": "average_by_date","cond": {"$and": [{"$gt": ["$average_by_date.date",a_week_ago]}]}
                }
            }
        }
    }
]
x = list(TopicEvaluationAverageMetric.objects.aggregate(*pipeline))

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...