Mongo DB在集合的子字段上获得平均值
问题描述:
鉴于集合中的以下项目,如何获得所有记录的id == 1的assessment.answer字段的平均值?此外,我需要返回subs []的第一个索引与每个记录像subs [0]Mongo DB在集合的子字段上获得平均值
{
"_id" : ObjectId("57b5e55e8426706357a90728"),
"updatedAt" : ISODate("2016-08-20T00:21:16.497Z"),
"createdAt" : ISODate("2016-08-18T16:42:06.173Z"),
"password" : "password",
"email" : "[email protected]",
"lastName" : "User",
"firstName" : "Test",
"assessment" : [
{
"subs" : [
100,
100,
100,
100,
100
],
"answer" : 2,
"id" : 1
},
{
"subs" : [
80,
40,
100,
60,
20
],
"answer" : 2,
"id" : 2
},
{
"subs" : [
80,
20,
20,
20,
20
],
"answer" : 4,
"id" : 3
},
{
"subs" : [
80,
100,
60,
100,
100
],
"answer" : 5,
"id" : 4
},
{
"subs" : [
60,
100,
100,
100,
100
],
"answer" : 1,
"id" : 5
},
{
"subs" : [
100,
100,
100,
100,
100
],
"answer" : 3,
"id" : 6
},
{
"subs" : [
80,
20,
100,
80,
60
],
"answer" : 3,
"id" : 7
},
{
"subs" : [
20,
20,
20,
20,
20
],
"answer" : 4,
"id" : 8
},
{
"subs" : [
60,
60,
60,
60,
40
],
"answer" : 5,
"id" : 9
},
{
"subs" : [
60,
60,
60,
60,
40
],
"answer" : 3,
"id" : 10
},
{
"subs" : [
100,
100,
100,
100,
100
],
"answer" : 4,
"id" : 11
},
{
"subs" : [
80,
80,
80,
80,
80
],
"answer" : 1,
"id" : 12
},
{
"subs" : [
60,
60,
60,
60,
60
],
"answer" : 2,
"id" : 13
},
{
"subs" : [
40,
40,
40,
40,
40
],
"answer" : 3,
"id" : 14
},
{
"subs" : [
80,
20,
20,
20,
100
],
"answer" : 3,
"id" : 15
}
],
"__v" : 51
}
答
var ids = [ 1, 2, 3, 4, 5 ];
var matchStage = { "$match": { "assessment.id": { "$in": ids } } };
db.accounts.aggregate(
[
matchStage,
{ "$unwind": "$assessment" },
matchStage,
{ "$group": {
"_id": null,
"avg": { "$avg": "$assessment.answer" }
}}
]
)
从MongoDB的3.2启动符合您的条件的文件,你可以做这样的:
db.accounts.aggregate(
[
matchStage,
{ "$project": {
"preAvg": {
"$avg": {
"$map": {
"input": {
"$filter": {
"input": "$assessment",
"as": "el",
"cond": { "$setIsSubset": [ [ "$$el.id" ], ids ] }
}
},
"as": "val",
"in": "$$val.answer"
}
}
}
}},
{ "$group": {
"_id": null,
"avg": { "$sum": "$preAvg" }
}}
]
)
+0
例如,我希望看到所有评估为1的地方。然后,对于每个记录,选择subs数组中每个索引的平均值。所以如果2个人有答案id = 1,那么显示和平均subs [0]为这些用户。如果每个分别选择1和4,我应该看到2 –
什么是你的MongoDB服务器的版本? – styvane
该版本是3.0.7 –
请看更新的问题... –