问题描述
我与 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 (将#修改为@)