我在MongoDB中有一个数据库。主要有三个字段:_id,评论,HotelInfo。评论和HotelInfo是数组。评论有一个称为作者的字段。我想打印出每个作者姓名(一次)及其在数据集中出现的次数。
我尝试过:
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格式。
任何有关如何执行此操作的想法将不胜感激
答案 0 :(得分:1)
让我们假设这是我们的收藏。
[{
_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}}}]
您需要先在“评论”字段中展开收藏集。 展开阶段之后,管道中的数据将如下所示。
{_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}]
展开是聚合框架中非常重要的管道阶段。它帮助我们将复杂且嵌套的文档转换为平面文档和简单文档,并帮助我们以不同方式查询数据。
答案 1 :(得分:0)
这很奏效,谢谢弗拉兹·弗里齐
db.reviews.aggregate({$ unwind:'$ Reviews'},{$ group:{_id:'$ Reviews.Author',count:{$ sum:1}}})。pretty()>