Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法聚合子文档的数组_Javascript_Node.js_Mongodb_Mongoose_Aggregation Framework - Fatal编程技术网

Javascript 无法聚合子文档的数组

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] }

我有如下文件

需要聚合最后一个数组元素的最新评级,并将其平均为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]  }
]
}

根据您的问题,我理解您应该找出上一次评级的平均值,因此在您的案例中,评级:[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的每个最后数组元素的平均值,以便您快速回答。解决办法似乎不错。但我担心,如果父文档在几千个范围内变大,服务器将占用太多资源。