Get and update document only when specific query in array?

I have some trouble with my mongoose request !

Here is my model :

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'
        }]
    }
]});

With this, I have to know how many new messages I have !

This is what I have done so far:

    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);
        }
});

But I think this will be hard for the server when we'll have lots of messages. Is it possible to get the same result with one request ? ( get all documents where messages[] does not contain a specific userId.

Then is it possible to update a document - push a userId in readBy array for all messages[] ?

Message.find({'messages.readBy':{'$ne':id}},
       function(err,messages){
        //messages contain all messages whose readBy field does not contain the
        //specified user 
 })

To push userId in readBy to all messages

Message.update({},{'$addToSet':{'messages.readBy':userId}},{multi:true},function(err,num){
        //callback
        //Add a query in the first parameter({}) if needed
})

multi:true is used to update multiple documents.