mongodb - 使用嵌入文档列表中的烧瓶 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 如何在 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))
解决方案
推荐阅读
- json - SchemaCrawler CLI 命令以 JSON 格式序列化 PostgreSQL 数据库,仅在 Schema 上显示 UID 而不是 SCHEMA 名称和信息
- bash - 对带有 getopt 的选项使用两个参数值
- c# - 如何创建一个非活动的异步方法存根?
- css - PhpStorm 中的 CSS 属性名称自动完成
- ruby-on-rails - 在rails中绘制图形
- c# - 使用 .NET 在 Angular 和 Cosmos DB 之间传递“纯”(无类)json
- windows - 在 non_ssl Apache Windows 安装上激活 mod_ssl 时出错“操作系统无法运行 %1”
- netsuite - 如何将 HTML 放入子列表字段?
- pandas - 如何使用python中两行之间差异的结果值?
- php - AWS HTTP 错误:创建资源时出错:[message] fopen(): SSL 操作失败,代码为 5