以下是模式

export const publicTaskSchema = new Schema({
  task: { required: true, type: String },
  user: {   
    _user: { type: String, required: true },
    userName: { type: String, required: true },
   },
  likes: {
    users: [{ 
      _user: { type: String, required: true },
      userName: { type: String, required: true },
     }], 
   },
  comments: [{ 
    user: { 
      _user: { type: String, required: true },
      userName: { type: String, required: true },
     } 
   }],
});

export const publicTaskListSchema = new Schema({
  tasks: { required: true, type: [publicTaskSchema], default: null },
  totalTasks: { required: true, type: Number, default: 0 },
});

我所要做的就是更新嵌套数组中的属性.

为此,我try 将位置运算符与数组筛选器一起使用,以更新满足要求的所有任务.

        const updated = await PublicTaskList.updateMany<PublicTaskListType>(
          {},
          {
            $set: {
              "tasks.$[].comments.$[user].userName": req.user.profile?.userName,
            },
          },
          { arrayFilters: [{ "user.user._user": req.user._user }], new: true }
        ).exec();


我得到的只是这个回答

{已确认:错误}

推荐答案

我认为你在这一行中漏掉了额外的user:

"tasks.$[].comments.$[user].user.userName"

为清楚起见,我将您的user位置标识符更改为element,如下所示:

const updated = await PublicTaskList.updateMany<PublicTaskListType>(
    {},
    {
        $set: {
            "tasks.$[].comments.$[element].user.userName": req.user.profile?.userName
        }
    },
    { 
        arrayFilters: [
            { 
                "element.user._user": req.user._user 
            }
        ]
    }
).exec();

另外,我已经删除了new:true,因为这不是Mongoose Model.updateMany()的有效选项.

Node.js相关问答推荐

查询嵌套数组中的最后一个元素具有特定值的mongoDB集合中的文档

自动将Selify打开的Chrome窗口移动到Mac OS中的第三个显示器

MongoDB上的updateOne和findOneAndUpdate在Node.js中无法正常工作

后端如何保护数据不被用户提取其他用户的数据?

在 puppeteer 中从 pdf 中删除 about:blank 和 date-time

从mongodb集合中获取每分钟数据的每小时数据

Puppeteer 在本地运行良好,但在 Heroku 中运行不佳

DynamoDB 分页数据检索

如何在Node.js的telegraf.js命令中添加参数?

如何使用Next.js/Node/TS正确地上传至S3

npm chokidar 触发事件两次

如何在 NestJS 中使用外部生成的 swagger.json?

为什么当我try req.logout() 时出现此错误?

NestJS TypeORM 可选查询不起作用

响应发送 200 而不是 403

使用服务帐户将 Firebase 应用程序部署到 Heroku(使用 dotenv 的环境变量)

使 pm2 登录到控制台

如何在 AWS 上的 Amazon Linux AMI 中自动启动 node.js 应用程序?

异步构造函数

在 Node.js 中使用公钥加密数据