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

Update specific values in a nested array within mongo through mongoose

本文关键字:数组 嵌套 mongoose 更新 mongo 通过      更新时间:2023-09-26

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

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

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

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

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

使用$位置选择运算符使返回的文档只包含匹配的inbox元素:

my_model.findOne({'inbox.msgid':'msgidvaluexyz'}
  , {'inbox.$': 1}
  , function(err, doc) {           
    console.log(doc);
    return !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数组或者其他的东西