2017-02-02 4 views
3

У меня есть несколько документов, как это ниже:Группы по MongoDB в дает странному результату

{ 
    "IMDBURL":"http:\/\/us.imdb.com\/M\/title-  exact?Schrei%20aus%20Stein%20(1991)", 
    "release_date":"08-Mar-1996", 
    "ratings":[{"user_id":916,"rating":3,"timestamp":"880845755"}], 
    "genre":["Drama","Thriller"], 
    "video":"","title":"Scream of Stone (Schrei aus Stein) (1991)" 
} 

и я пытаюсь показать название фильмов с количеством жанров они принадлежат.

До сих пор я делаю это

db.bigdata.aggregate(
    {$unwind:"$genre"}, 
    {$group: {_id:"$title",genres: {$sum:"$genre"}}} 
) 

я получаю этот ответ

{"_id" : "Sunchaser, The (1996)", "genres" : 0 } 
{ "_id" : "Kika (1993)", "genres" : 0 } 

Может кто-то пожалуйста, скажите мне, что я делаю неправильно?

+0

Результаты верны. Каков ваш ожидаемый ответ? –

+0

«Жанр» - это строка, поэтому вы получаете этот результат. Если вам нужно количество жанров, вы должны использовать оператор '$ size' – styvane

+0

Возможно, из-за $ sum – Brian

ответ

2

От MongoDB $sum документации:

{ $sum : <field> } Numeric      Sum of Values 
{ $sum : <field> } Numeric and Non-Numeric  Sum of Numeric Values 
{ $sum : <field> } Non-Numeric or Non-Existent 0 

Как вы можете видеть, третий случай четко сказано - сумма нечисловых полей даст вам 0 как результат. Если вы хотите вернуть коллекцию всех жанров, то вы должны использовать $addToSet. Если вы хотите, чтобы получить количество жанров, вы должны использовать

{$group: {_id:"$title", genres: {$sum:1}}} 

И нет никакой необходимости, чтобы расслабиться и групп для этого (если вы не дублируетесь жанры) - простой $ размера будет делать то же самое в проекционном операторе.

+0

Да, я новичок в монго, и я этого не заметил. Я считаю, что мне нужно подсчитать количество жанров, в которых каждый фильм принадлежит, я должен расслабиться. В противном случае с вашим запросом он всегда будет давать жанровое поле равным единице, что нормально, так как каждый документ имеет жанровое поле. – Akis

+0

@ Акис почему? $ size вернет число жанров –

+1

Да, размер делает работу, но не сумма. Большое спасибо – Akis

Смежные вопросы