Mongodb Mongoose嵌套对象不更新';无法创建字段";"富",;在元素中';

Mongodb Mongoose嵌套对象不更新';无法创建字段";"富",;在元素中';,mongodb,mongoose,Mongodb,Mongoose,我有一个类似的问题 我正在尝试使用“findAndUpdate”创建一个新字段。我已经尝试了所有的方法,$set,$push,$addSet。。。它们似乎都不起作用,我也一直犯同样的错误 代码如下: router.post('/accept', auth, async (req, res) => { const useremail = user.email const originalEvent = await Event.findOneAndUpdate({eve

我有一个类似的问题

我正在尝试使用“findAndUpdate”创建一个新字段。我已经尝试了所有的方法,$set,$push,$addSet。。。它们似乎都不起作用,我也一直犯同样的错误

代码如下:

router.post('/accept', auth, async (req, res) => {        
  const useremail = user.email
  const originalEvent = await Event.findOneAndUpdate({eventId: 61469041, isOrganizer: true, "attendees.email": useremail},
            {"$push":{"attendees.status" : "accepted"}},
            {new: true})
            res.status(200).json({originalEvent, event})
          
          } 
          catch (e) {
          res.status(400).json({ msg: e.message, success: false });
        }
        });
以下是错误代码:

"Cannot create field 'status' in element {attendees: [ { _id: ObjectId('5f80a02a82dceb2810e0aa66'), email: "bob@gmail.com", name: "Bob" } ]}"
以下是我尝试更新的对象:

{
    "organizer": {
      "email": "alex@gmail.com",
      "name": "Alex"
    },
    "_id": "5f80a02a82dceb2810e0aa65",
    "title": "Go to the beach",
    "eventId": 61469041,
    "isOrganizer": true,
    "user": "5f05f23417ca6ab69ccc4cf2",
    "attendees": [
      {
        "_id": "5f80a02a82dceb2810e0aa66",
        "email": "bob@gmail.com",
        "name": "Bob"
      }
    ],
    "__v": 0,
  }
预期成果:

{
    "organizer": {
      "email": "alex@gmail.com",
      "name": "Alex"
    },
    "_id": "5f80a02a82dceb2810e0aa65",
    "title": "Go to the beach",
    "eventId": 61469041,
    "isOrganizer": true,
    "user": "5f05f23417ca6ab69ccc4cf2",
    "attendees": [
      {
        "_id": "5f80a02a82dceb2810e0aa66",
        "email": "bob@gmail.com",
        "name": "Bob",
        "status": "accepted"
      }
    ],
    "__v": 0,
  }
解决方法如下:

  const originalEvent = await Event.findOneAndUpdate({eventId: eventId, "isOrganizer": true, 
    "attendees": {$elemMatch: {email: useremail}}
  },
    { $set: { "attendees.$.status": "accepted"} }
      )
    
    res.status(200).json(originalEvent)
  
  } 

引用
attenders.status
没有意义,因为在模式中
attenders
不是一个对象(带有
status
等字段),而是一个数组。但你可以用不同的方式。如果您有要修改的与会者索引,可以执行
{$set:{“Attendeers.0.status:“accepted”}
,其中
0
是数组中的索引


另外,关于问题的前半部分,您看到的错误是因为
$push
在阵列上工作。因此,为了使您的操作正常工作,您必须首先初始化这样一个对象
{attenders:{status:[]}}

如果字段不是数组,则操作将失败。()