无法聚合子文档的数组

时间:2014-12-05 07:13:11

标签: javascript node.js mongodb mongoose aggregation-framework

我有以下文件

需要汇总最新评级的最后一个数组元素和平均值(3,1,3,1), 在这里我被双重放松无法得到结果

{  
Name: name  
Content: [
      {   Rating:[1,2,3]  }    ,   
      {   Rating:[3,2,1]  }
]
},
{  
Name: name  
Content: [
      {   Rating:[1,2,3]  }    ,   
      {   Rating:[3,2,1]  }
]
}

1 个答案:

答案 0 :(得分:0)

根据您的问题,我了解您应该找到上次评分的平均值,因此在您的情况下Rating:[3,2,1]将是您想要平均的最后评分,但问题是您的评分数据在这两个帖子{ {3}}和click here您应该更改评级结构,如下所示

 Rating:[{"first":1,"second":2,"third":3}]

所以使用它很容易找出平均值但是,如果你不能改变这个结构那么你应该放松两次并且它发生了笛卡尔问题如果你的集合大小有限它将有所帮助但是对于大的集合大小它需要。我使用聚合并将其展开两次并得到以下最后一个评级代码。

db.collectionName.aggregate(
 {"$unwind":"$Content"},// first unwind on content
 {"$group":{"_id":"$_id","Ratings":{"$last":"$Content.Rating"}}},   
 {"$unwind":"$Ratings"},// Second for remove array element to outside
 {"$group":{"_id":"$_id","avg":{"$avg":"$Ratings"}}})