как использовать 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