我在 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 替换
您正在使用 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,
}
],
})