MongoDB Агрегировать подполе массива (Массив является основным полем) - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть база данных в 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 "]," count ": 1

Как должно быть:

{" _id ":"VijGuy", "count": 1}, {"_id": "Stephtastic", "count": 1}

Я разместил формат JSON ниже.

Любая идея о том, каксделать это будет приветствоваться

JSON формат

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Предположим, что это наша коллекция.

[{ 
_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: 'elad',sum:2},{_id: 'chen', sum: 1}]

Размотка - это очень важный этап конвейера в структуре агрегации.Это помогает нам преобразовывать сложные и вложенные документы в простые и простые, что помогает нам запрашивать данные различными способами.

Что такое оператор $ unwind в MongoDB?

0 голосов
/ 09 декабря 2018

Это сработало, спасибо elad frizi

db.reviews.aggregate ({$ unwind: '$ Reviews'}, {$ group: {_id: '$ Reviews.Author', количество: {$сумма: 1}}}). pretty ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...