我有点以下模式(不带_id)-

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


现在,在请求中我得到了msgid,并在下面的猫鼬查询中使用了它-

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


现在的问题是,我得到了整个文档,其中包含特定消息以及收件箱中的其他消息-

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


现在,仅当文档收件箱太大而无法循环访问时,我才可以使用哪种查询来获取特定的子数组。

最佳答案

使用$ positional selection operator可使返回的文档仅包含匹配的inbox元素:

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

10-07 14:08