我在 MongoDB 中创建了一个带有标题、描述、作者、评论的集合“帖子”:

db.posts.insert({
                  title:'MongoDB',
                  description:'MongoDB is a NoSQL DB',
                  by:'Tom',
                  comments:[
                             {user:'ram',
                               message:'We use MongoDB'
                             }
                           ]
                }
               )

同样,我添加了另外两个条目。
现在,我想编写 MapReduce 函数来计算 MongoDB 中各种用户创建的帖子数。我用了:
db.posts.mapReduce(
   function() { emit(this.user_id,1); },
   function(key, values) {return Array.sum(values)}, {
      out:"post_total"
   }

).find()

此输出:
{"id": null , "value": 3}

但是,我想显示的是:
{ "_id" : "tom_id", "value" : 2 }
{ "_id" : "mark_id", "value" : 1 }

或者
{ "by" : "tom", "value" : 2 }
{ "by" : "mark", "value" : 1 }

最佳答案

最后,我解决了。我从 MapReduce function in MongoDB - Grouping document by ID 那里得到了一些想法

db.posts.mapReduce(
   function() { emit(this.by,1); },
   function(key, values) {return Array.sum(values)}, {
      out:"post_total"
   }

).find()

我做错的是,emit(this.user_id,1)。我传错了 key 。

关于mongodb - 编写 MapReduce 函数来计算 MongoDB 中不同用户创建的帖子数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39030644/

10-11 22:44
查看更多