通过mongoose更新mongodb中嵌套数组中的特定值

时间:2013-04-05 06:20:30

标签: javascript node.js mongodb mongoose nosql

我有点以下架构(没有_id) -

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

现在,在请求中我得到了msgid,我在下面的mongoose查询中使用它,如下所示 -

 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},
      ]
       }

现在我可以使用什么查询来获取特定的子数组,因为文档收件箱太大而无法循环。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

如果我理解你的问题:

// 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

您可以选择要返回的字段。您只能获得inbox数组或除此之外的所有内容。