我正在使用mongodb,我想找到 2014年2月13日之后加入的学生的平均年龄。我尝试了聚合框架,但没有设法找到解决方案。
我的文件示例:
{
"_id" : 1,
"zipcode" : 63109,
"students" : [
{
doj: ISODate("2014-02-12T00:00:00Z"),
"name" : "john",
"school" : 102,
"age" : 10
},
{
doj: ISODate("2014-02-14T00:00:00Z"),
"name" : "jess",
"school" : 102,
"age" : 11
},
{
doj: ISODate("2014-02-13T00:00:00Z")
"name" : "jeff",
"school" : 108,
"age" : 15
}
]
},
{
"_id" : 2,
"zipcode" : 63109,
"students" : [
{
doj: ISODate("2014-02-14T00:00:00Z"),
"name" : "john",
"school" : 102,
"age" : 16
}
]
}
请帮我找到解决方案。提前谢谢
答案 0 :(得分:1)
假设集合名称是学生,您可以使用以下聚合查询:
db.students.aggregate(
{$unwind:'$students'}, //unwinds student array
{$match:{'students.doj':{$gt:ISODate("2014-02-13T00:00:00Z")}}}, //gets entries of student whose date of join greater than 13th February 2014
{$group:{_id:null,average_age:{$avg:'$students.age'}}} //gets the average
)
在上面的查询中,如果要根据zipcode对数据进行分组,则可以使用以下语句替换group语句
{$group:{_id:'$zipcode',average_age:{$avg:'$students.age'}}}