我的mongoose请求有些麻烦!
这是我的模特:
var MessageSchema = new Schema({
...,
messages: [
{
user: {
type: Schema.ObjectId,
ref: 'User'
},
created: {
type: Date,
default: Date.now
},
content: String,
readBy: [{
type: Schema.ObjectId,
ref: 'User'
}]
}
]});
有了这个,我必须知道我有多少新消息!
这是我到目前为止所做的:
Message.find({
...
})
.select('messages.readBy')
.exec(function(err, messages) {
if (err) {
// catch error
} else {
// On trie les messages.
_.forEach(messages, function(msgs,i){
var allRead = true;
_.forEach(msgs.messages, function(msg){
if(msg.readBy.indexOf(id) === -1){ allRead = false; }
});
if(allRead) messages = _.without(messages,messages[i]);
});
return $socket.emit('Messages:nbNonLu', messages.length);
}
});
但我认为当我们收到大量邮件时,这对服务器来说很难。
是否可以通过一个请求获得相同的结果? (获取messages[]
不包含特定userId
的所有文档。
然后是否可以更新文档 - 在userId
数组中推送readBy
所有messages[]
?
答案 0 :(得分:0)
Message.find({'messages.readBy':{'$ne':id}},
function(err,messages){
//messages contain all messages whose readBy field does not contain the
//specified user
})
将readBy中的userId推送到所有消息
Message.update({},{'$addToSet':{'messages.readBy':userId}},{multi:true},function(err,num){
//callback
//Add a query in the first parameter({}) if needed
})
multi:true
用于更新多个文档。