Mongodb 嵌入文档的聚合平均值

Mongodb 嵌入文档的聚合平均值,mongodb,mongodb-query,pymongo,aggregation-framework,Mongodb,Mongodb Query,Pymongo,Aggregation Framework,我的文档结构如下所示: { “_id”:ObjectId(“52517d9e6e0af435ddd48219”), “日期”:ISODate(“2013-10-06T18:11:26.329Z”), “发动机”:{ “ahnlab”:{ “定义”:ISODate(“2000-01-01T00:00:00.000Z”), “名称”:“ahnlab”, “节点名称”:“”, “地位”:1, “任务id”:“7fac4f67-2bde-49de-980a-4f7fa1d46db7”, “威胁”:“EI

我的文档结构如下所示:

{
“_id”:ObjectId(“52517d9e6e0af435ddd48219”),
“日期”:ISODate(“2013-10-06T18:11:26.329Z”),
“发动机”:{
“ahnlab”:{
“定义”:ISODate(“2000-01-01T00:00:00.000Z”),
“名称”:“ahnlab”,
“节点名称”:“”,
“地位”:1,
“任务id”:“7fac4f67-2bde-49de-980a-4f7fa1d46db7”,
“威胁”:“EICAR\u测试文件”
},
“avast”:{
“定义”:ISODate(“2000-01-01T00:00:00.000Z”),
“名称”:“avast”,
“节点名称”:“”,
“地位”:4,
“任务id”:“fdce50e9-9bf3-4cc9-91a4-b674a108d478”,
“威胁”:”
},
“平均值”:{
“定义”:ISODate(“2000-01-01T00:00:00.000Z”),
“名称”:“平均值”,
“节点名称”:“”,
“地位”:1,
“任务id”:“4bdb4a37-80ab-4631-8587-edcbde7e2592”,
“威胁”:“EICAR_测试”
},
“阿维拉”:{
“定义”:ISODate(“2000-01-01T00:00:00.000Z”),
“姓名”:“阿维拉”,
“节点名称”:“”,
“地位”:4,
“任务id”:“43b43bab-ff67-440c-9919-f6241ccaf539”,
“威胁”:”
},
“bitdefender”:{
“定义”:ISODate(“2000-01-01T00:00:00.000Z”),
“名称”:“bitdefender”,
“节点名称”:“”,
“地位”:4,
“任务id”:“ba7efe74-ef93-465f-b6c3-6c4fc746934d”,
“威胁”:”
},
“科摩多”:{
“定义”:ISODate(“2000-01-01T00:00:00.000Z”),
“名称”:“科摩多”,
“节点名称”:“”,
“地位”:4,
“任务id”:“831d2dc8-704b-4eb7-9a75-9a0364a8ab09”,
“威胁”:”
},
“drweb”:{
“定义”:ISODate(“2000-01-01T00:00:00.000Z”),
“名称”:“drweb”,
“节点名称”:“”,
“地位”:4,
“任务id”:“ebb758c3-9146-4a99-b36f-0fb6ee024a33”,
“威胁”:”
},
“f-prot”:{
“定义”:ISODate(“2000-01-01T00:00:00.000Z”),
“名称”:“f-prot”,
“节点名称”:“”,
“地位”:4,
“任务id”:“13590a25-ac0d-4b1b-b93e-bc715009432a”,
“威胁”:”
},
“客户”:{
“定义”:ISODate(“2000-01-01T00:00:00.000Z”),
“名称”:“客户机”,
“节点名称”:“”,
“地位”:4,
“任务id”:“,
“威胁”:”
},
“卡巴斯基”:{
“定义”:ISODate(“2000-01-01T00:00:00.000Z”),
“姓名”:“卡巴斯基”,
“节点名称”:“”,
“地位”:4,
“任务id”:“,
“威胁”:”
},
“malwarebytes”:{
“定义”:ISODate(“2000-01-01T00:00:00.000Z”),
“名称”:“malwarebytes”,
“节点名称”:“”,
“地位”:4,
“任务id”:“a97f3d9a-d6a9-44df-8355-c053e9f4980a”,
“威胁”:”
},
“mcafee”:{
“定义”:ISODate(“2000-01-01T00:00:00.000Z”),
“姓名”:“mcafee”,
“节点名称”:“”,
“地位”:1,
“任务id”:“e7a592bb-84fc-4c47-a1ed-3719874b19cc”,
“威胁”:“EICAR测试文件”
},
“msessentials”:{
“定义”:ISODate(“2000-01-01T00:00:00.000Z”),
“名称”:“msessentials”,
“节点名称”:“”,
“地位”:4,
“任务id”:“01c9fb71-155a-473d-b45c-91fa117ae649”,
“威胁”:”
},
“nod32”:{
“定义”:ISODate(“2000-01-01T00:00:00.000Z”),
“名称”:“nod32”,
“节点名称”:“”,
“地位”:4,
“任务id”:“a715cc8f-0e2f-4698-b883-a35fa6add13e”,
“威胁”:”
},
“诺曼”:{
“定义”:ISODate(“2000-01-01T00:00:00.000Z”),
“姓名”:“诺曼”,
“节点名称”:“”,
“地位”:4,
“任务id”:“29da2955-0674-45d2-ac4d-c0b3ea401cba”,
“威胁”:”
},
“诺顿”:{
“定义”:ISODate(“2000-01-01T00:00:00.000Z”),
“姓名”:“诺顿”,
“节点名称”:“”,
“地位”:4,
“任务id”:“c4cd1e3e-2f0d-4bf6-84cf-ab0962f7f4ed”,
“威胁”:”
},
“熊猫”:{
“定义”:ISODate(“2000-01-01T00:00:00.000Z”),
“名称”:“熊猫”,
“节点名称”:“”,
“地位”:4,
“任务id”:“b0888f7c-e4a4-4b4e-b163-21d283e166f1”,
“威胁”:”
}
},
“到期日”:ISODate(“2013-10-06T18:11:36.329Z”),
“文件名”:“ffgtr.exe”,
“扫描状态”:“完成”,
“任务id”:“4ce4ae9e-ef0a-476a-8189-92a5bfe328bd”
}
我想用聚合来预测每个引擎的“日期”和“定义”字段。 (“定义”是一个嵌入字段)

只有在指定特定引擎时,我才能成功执行此操作:

cursor=collection.aggregate([
{“$match”:{“date”:{“$gte”:startdate}},
{'$project':{“def”:“$engines.avast.definitions”,“date”:1,“\u id”:0}
],allowDiskUse=True)
但我希望在不指定特定引擎的情况下对所有引擎运行查询,例如:

cursor=collection.aggregate([
{“$match”:{“date”:{“$gte”:startdate}},
{'$project':{“def”:“$engines.$elemMatch.definitions”,“date”:1,“\u id”:0}”
],allowDiskUse=True)
(这不起作用)


我想找到的是每个引擎类型的“日期”和每个“引擎”定义日期之间的平均差异。

这里的主要问题是数据的结构。为了机智地工作