2014-02-14 122 views
0

我正在使用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 
     } 
    ] 
} 

请帮我找到解决方案。谢谢你在前进

回答

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 
) 

在上面查询声明如下声明

{$group:{_id:'$zipcode',average_age:{$avg:'$students.age'}}}