Javascript 无法聚合子文档的数组
我有如下文件 需要聚合最后一个数组元素的最新评级,并将其平均为3,1,3,1, 在这里,我被双重放松卡住了,无法得到结果Javascript 无法聚合子文档的数组,javascript,node.js,mongodb,mongoose,aggregation-framework,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] }
{
Name: name
Content: [
{ Rating:[1,2,3] } ,
{ Rating:[3,2,1] }
]
},
{
Name: name
Content: [
{ Rating:[1,2,3] } ,
{ Rating:[3,2,1] }
]
}
根据您的问题,我理解您应该找出上一次评级的平均值,因此在您的案例中,评级:[3,2,1]将是您想要平均的最后一次评级,但问题是根据这两个线程在数组中显示您的评级数据,您应该按以下方式更改评级结构
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"}}})
您为最新的评级元素设置了哪些标准?请改进您的问题,以显示如何以及在哪个评级元素上计算平均值。我只需要RatingTanks Yogesh的每个最后数组元素的平均值,以便您快速回答。解决办法似乎不错。但我担心,如果父文档在几千个范围内变大,服务器将占用太多资源。