在mongoDB中分组给出了奇怪的结果

时间:2017-02-02 15:20:43

标签: mongodb mongodb-query aggregation-framework

我有以下多个文件:

{
    "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 }

有人可以告诉我我做错了吗?

1 个答案:

答案 0 :(得分: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}}}

并且没有必要为此放松和分组(除非你有重复的类型) - 简单的$ size在投影操作符中也会这样做。