Update specific values in a nested array within mongo through mongoose

I have somewhat the following schema(without _id) -

 {uid: String,
 inbox:[{msgid:String, someval:String}]
 }

Now, in the request I get the msgid and I use it in the following mongoose query like this-

 my_model.findOne({'inbox.msgid':'msgidvaluexyz'}
  , function(err, doc) {           
    console.log(doc);
    return !0; })

Now, the problem is that I get the whole document which has the specific message along with the other messages in inbox -

   Output-
   {uid:'xyz',
    inbox:[
     {msgid:,someval},
     {msgid:'our queried msgid',someval}, //required sub array
     {msgid:,someval},
      ]
       }

Now what query can i use to get the specific sub array only as the document inbox is too large to be looped through.

Use the $ positional selection operator to have the returned doc only include the matched inbox element:

my_model.findOne({'inbox.msgid':'msgidvaluexyz'}
  , {'inbox.$': 1}
  , function(err, doc) {           
    console.log(doc);
    return !0; })

If I understood your question correctly:

// find each person with a last name matching 'Ghost'
var query = Person.findOne({ 'name.last': 'Ghost' });

// selecting the `name` and `occupation` fields
query.select('name occupation');

http://mongoosejs.com/docs/queries.html

You can select which fields you want to get back. You could get only the inbox array or everything except that.