如何替换对象数组内的数组元素

问题描述 投票:0回答:1

我在 mongodb 中有以下架构

  teamMembers: [
    {
      employeeId: {
        type: Array,
        required: true,
      },
      role_id: {
        type: String,
        required: true,
      },
    },
  ],

我想用另一个现有的 ID 替换 employeeId。为此,我尝试了以下

let event = await eventsModel.updateOne(
 {
    _id: info.eventId,
    "teamMembers.employeeId": req.body.leaveSeekerId,
    },
    {
      set: { "teamMembers.$[elem].employeeId.$[]": info.replacement },
     },
     {
       arrayFilters: [{ "elem.employeeId": req.body.leaveSeekerId }],
     }
  } 
 );

但是通过执行此操作,employeeId 数组中存在的所有 id 都将被新 id 替换

database mongodb mongoose-schema
1个回答
0
投票

您正在使用 Mongo 的数组位置所有标识符 $[] ,来自文档:

全位置运算符$[]表示更新运算符应修改指定数组字段中的所有元素。

所以你告诉他修改嵌套数组中的所有元素,如果你只需添加一个类似于将其添加到父元素的标识符,就可以轻松解决这个问题,如下所示:

db.collection.updateOne({
  "teamMembers.employeeId": req.body.leaveSeekerId,
},
{
  $set: {
    "teamMembers.$[elem].employeeId.$[elem2]": info.replacement
  },
  
},
{
  arrayFilters: [
    {
      "elem.employeeId": req.body.leaveSeekerId,
    },
    {
      "elem2": req.body.leaveSeekerId,
    }
  ],
})

蒙戈游乐场

© www.soinside.com 2019 - 2024. All rights reserved.