我在MongoDB中有一个数据库 . 主要有三个领域:_id,评论,HotelInfo . 评论和HotelInfo是数组 . 评论有一个名为Author的字段 . 我想打印每个作者姓名(一次)以及他们在数据集中出现的次数 .
我试过了:
db.reviews.aggregate({$ group:{_ id:'$ Reviews.Author',count:{$ sum:1}}}) . . pretty()
部分结果如下:
“_id”:[“VijGuy”,“Stephtastic”,“dakota431”,“luce_sociator”,“ArkansasMomOf3”,“ccslilqt6969”,“RJeanM”,“MissDusty”,“sammymd”,“TripAdvisor会员”,“TripAdvisor会员“],”计数“:1
它应该如何:
{“_ id”:“VijGuy”,“count”:1},{“_ id”:“Stephtastic”,“count”:1}
我在下面发布了JSON格式 .
任何关于如何做到这一点的想法将不胜感激
2 回答
这工作,谢谢你说frizi
db.reviews.aggregate({$ unwind:'$ Reviews'},{$ group:{_ id:'$ Reviews.Author',count:{$ sum:1}}}) . pretty()
让我们假设这是我们的收藏 .
要获得您想要的数据,我们需要首先使用展开阶段,然后使用组阶段 .
您需要先按评论字段展开集合 . 在展开阶段之后,我们在管道中的数据将如下所示 .
unwind为Reviews数组中的每个元素创建了一个文档,其中包含元素本身和他的宿主文档 . 现在可以根据需要轻松地按照有用的方式进行分组 . 现在我们可以使用您编写的同一组,我们将获得结果 .
在小组之后,我们的数据将如下所示:
展开是聚合框架中非常重要的管道阶段 . 它帮助我们将复杂和嵌套的文档转换为平面和简单,这有助于我们以不同的方式查询数据 .
What's the $unwind operator in MongoDB?