MongoDB聚合数组的子字段(数组是主字段)

MongoDB聚合数组的子字段(数组是主字段),mongodb,mongodb-query,Mongodb,Mongodb Query,我在MongoDB有一个数据库。有三个主要字段:\ id、评论、HotelInfo。评论和HotelInfo是数组。评论有一个名为Author的字段。我想打印出每个作者的名字(一次)以及他们在数据集中出现的次数 我试过: 聚合({$group:{{u id:'$reviews.Author',计数:{$sum:1}}).pretty() 部分结果是: “_id”:[ “VijGuy”, “Stephtastic”, “达科他431”, “luce_sociator”, “阿肯色州3号”, “cc

我在MongoDB有一个数据库。有三个主要字段:\ id、评论、HotelInfo。评论和HotelInfo是数组。评论有一个名为Author的字段。我想打印出每个作者的名字(一次)以及他们在数据集中出现的次数

我试过:

聚合({$group:{{u id:'$reviews.Author',计数:{$sum:1}}).pretty()

部分结果是:

“_id”:[ “VijGuy”, “Stephtastic”, “达科他431”, “luce_sociator”, “阿肯色州3号”, “ccslilqt6969”, “RJeanM”, “MissDusty”, “sammymd”, “TripAdvisor成员”, “TripAdvisor成员” ], “计数”:1

应该如何:

{u id:“VijGuy”,“count”:1},{u id:“steptastic”,“count”:1}

我在下面发布了JSON格式

任何关于如何做到这一点的想法都将不胜感激


这起作用了,谢谢你,埃拉德·弗里齐


db.reviews.aggregate({$unwind:'$reviews'},{$group:{{u id:'$reviews.Author',count:{$sum:1}}}})。pretty()

让我们假设这是我们的集合

[{ 
_id: 1, 
Reviews: [{Author: 'elad' , txt: 'good'}, {Author: 'chen', txt: 'bad'}]
},
{
_id: 2,
Reviews: [{Author: 'elad', txt : 'nice'}]
}]
要获得您想要的数据,我们需要先使用“展开”阶段,然后使用“分组”阶段

[{ $unwind: '$Reviews' }, {$group : { _id : '$Reviews.Author', count : {$sum : 1}}}]
您需要首先通过Reviews字段展开集合。 在展开阶段之后,我们在管道中的数据将如下所示

{_id:1, Reviews: {Author: 'elad' , txt: 'good'}},
{_id:1, Reviews: {Author: 'chen' , txt: 'bad'}},
{_id:2, Revies:  {Author: 'elad', txt : 'nice'}
展开为Reviews数组中的每个元素创建了一个文档,其中包含元素本身及其宿主文档。现在,可以很容易地按照您想要的方式以有用的方式进行分组。现在我们可以使用您编写的同一组,我们将得到结果

分组后,我们的数据如下所示:

[{_id: 'elad',sum:2},{_id: 'chen', sum: 1}]
在聚合框架中,展开是一个非常重要的管道阶段。它帮助我们将复杂的嵌套文档转换为简单的平面文档,并帮助我们以不同的方式查询数据


({$unwind:'$Reviews'},{$group:{{U id:'$Reviews.AUTHER',count:{$sum:1}}})感谢您的解释,这更有意义!