У меня есть коллекция документов, каждый из которых представляет голос за фильм.Каждый документ содержит внутренний документ, который описывает фильм.Примерно так
{movie: {_id: '123', name: 'fargo'}, vote: 'good'},
{movie: {_id: 'abc', name: 'fargo'}, vote: 'good'},
{movie: {_id: 'abc', name: 'fargo'}, vote: 'bad'},
{movie: {_id: 'xyz', name: 'fargo'}, vote: 'good'},
По какой-то причине со временем один и тот же фильм «Фарго» был помечен разными _id
, но это один и тот же фильм.Другими словами, реальный ключ для фильма - это name
, а не _id
, как это обычно можно представить.
Теперь я хотел бы сделать это group
, с помощью агрегации конвейер, все фильмы с одинаковыми name
, игнорируя тот факт, что они могут иметь разные _id
s, и подсчитывать количество good и плохо голосов, которые они получили.
Итак, в случае примера я хотел бы получить в результате агрегации что-то вроде
{name: 'fargo', votes: [
{vote: 'good', count: 3},
{vote: 'bad', count: 1}
]}
До сих пор я пытался
{$group: {_id: {movieName: "$movie.name", vote: "$vote"}, count: {$sum: 1}, }}
но безуспешно.
Любое предложение понять, где я совершил ошибку, будет оценено.