как использовать mapreduce в под-документе запроса mongoose / mongodb?

Я реализовал простую систему сообщений в mongoose / mongodb, схема выглядит следующим образом

var schema = new mongoose.Schema({
    user: {type:String, required:true},
    updated: {type:Date, default:new Date()},       
    msgs: [ {m:String, // message itself 
             d:Date,   // date of message
             s: String,  // message sender
             r:Boolean   // read or not
            } ],
});

все сообщения хранятся во вложенном массиве msg, теперь я хочу запросить сообщения от определенного отправителя, например,

{
  "_id" : ObjectId("52c7cbe6d72ecb07f9bbc148"),
  'user':'abc'
  "msgs" : [{
      "m" : "I want to meet you",
      "d" : new Date("4/1/2014 08:52:54"),
      "s" : "user1",
      "r" : false,
      "_id" : ObjectId("52c7cbe69d09f89025000005")
    }, {
      "m" : "I want to meet you",
      "d" : new Date("4/1/2014 08:52:56"),
      "s" : "user1",
      "r" : false,
      "_id" : ObjectId("52c7cbe89d09f89025000006")
    }, {
      "m" : "I want to meet you",
      "d" : new Date("4/1/2014 08:52:58"),
      "s" : "user2",
      "r" : false,
      "_id" : ObjectId("52c7cbea9d09f89025000007")
    }
   }

Здесь у меня есть документ для пользователяаа» у кого есть три сообщения, два сообщения отuser1' и одно сообщение отuser2', И я хочу запросить сообщения отuser1'

По сути, есть два способа сделать это: уменьшить или объединить. Я попробовал решение уменьшить карту.

var o = {}; 
o.map = function() { 
    this.msgs.forEach(function(msg){ 
        if(msg.s == person){  emit( msg.s, {m:msg.m,d:msg.d,r:msg.r}); }
    })
}       
o.reduce = function(key, values) {
    var msgs = [];
    for(var i=0;i

Ответы на вопрос(2)

Ваш ответ на вопрос