Mongoose:如何将新值推送到特定键中?

Posted

技术标签:

【中文标题】Mongoose:如何将新值推送到特定键中?【英文标题】:Mongoose: How to push new value into specific key? 【发布时间】:2021-12-27 17:46:43 【问题描述】:

我有这个函数可以更新我的任务集合。问题是如何使用 $push 将新值添加到特定附件的数组中。

架构

const taskSchema = mongoose.Schema(
  projectId: 
    type: mongoose.Schema.Types.ObjectId,
    ref: 'projectModel',
  ,
  attachments: [
    
      fileThumbnail:  type: String ,
      name:  type: String ,
      size:  type: Number ,
      uploadDate:  type: String ,
      status: 
        type: Boolean,
        default: true,
      ,
    ,
  ],
);

任务控制器

export const updateTaskById = async (req, res) => 
  try 
    const 
      _id,
      projectId,
      attachments,
     = req.body;

    const task = await taskModel.findById(req.params.id);
    if (task) 
      task.invitedPeopleId = invitedPeopleId || task.invitedPeopleId;
    

await task.save(
      validateBeforeSave: false,
    );

   catch (error) 
    console.log(error.message);
  
;

我尝试过的解决方案

taskModel.updateOne(
   projectId: projectId ,
   $push:  attachments: attachments  ,
);

【问题讨论】:

【参考方案1】:

您可能正在混淆模型和架构,a common misunderstanding。

您创建了一个架构,但没有从该架构编译模型。这就是您编译模型的方式。

const Task = mongoose.model('task', TaskSchema, 'tasks')
export default Task

然后,在您的taskController 中,导入模型以操作文档。

import Task from '../models/task.model.js'

最后使用updateOne方法修改文档:

Task.updateOne(
      
        projectId: 1,
      ,
      
        $push: 
          attachments: 
            name: 'file4',
            size: 4,
          ,
        ,
      
    )

这个Mongo playground 演示了更新。

【讨论】:

以上是关于Mongoose:如何将新值推送到特定键中?的主要内容,如果未能解决你的问题,请参考以下文章

如何将新值推送到 Store 对象?

PHP如何跟踪关联数组中的顺序?

在 Bash 的 heredoc 中将新值推送到数组

SwiftUI:PreferenceKey Reduce 方法永远不会被调用

JavaScript 推送到数组

Mongoose 无法将新对象推送到父数组