通过 mongoose 将项目插入 mongo 数组

Posted

技术标签:

【中文标题】通过 mongoose 将项目插入 mongo 数组【英文标题】:Insert items into mongo array via mongoose 【发布时间】:2022-01-07 07:22:19 【问题描述】:

我有一个类似下面代码的 mongo 集合:

const ExerciseSchema = new Schema(
  name:  type: String, required: true ,
  exercise: [
    
      exerciseId: 
        type: mongoose.Schema.Types.ObjectId,
        required: true,
        ref: Exercise,
      ,
      period:  type: String, enum: ["day", "night"], required: true ,
    ,
  ],
  timestamp:  type: Date, default: Date.now() ,
);

当我尝试同时插入多个练习时,考虑到我的练习是一个数组,mongo 只保存第一个寄存器。例如,我尝试插入:


    "name": "Exercise 1",
    "exercise": [
        
            "exerciseId": "1",
            "period": "night"
        ,
        
            "exerciseId": "1",
            "period": "day"
        
    ]

而且,保存后,get方法返回我:

[
    
        "timestamp": "2021-11-30T14:18:42.455Z",
        "_id": "1",
        "name": "Exercise 1",
        "exercise": [
            
                "exerciseId": "1",
                "period": "night",
            
        ],
        "__v": 0
    
]

也就是说,猫鼬只保存了我数组中的第一个寄存器。 有人知道为什么会这样吗? 从控制器听到我的创建方法:

exports.create = (req, res) => 
  const 
    name,
    exercise: [ exerciseId, period ],
   = req.body;
  const newExercise = new Exercise(
    name,
    exercise: [ exerciseId, period ],
  );
  newExercise.save((err, data) => 
    if (err) 
      res.status(500).send( message: err );
      return;
    
    res
      .status(200)
      .send(
        message: "Success",
      );
  );
;

Obs:我通过“new Exercise(...)”从控制器中引用我的 ExerciseSchema

【问题讨论】:

【参考方案1】:

用它来更新数组:

parent ---> a mongooose doc
parent.child.push(new child object);
parent.markModified('child');
parent.save();

在您的情况下,孩子是运动数组,并且在 parent.markModified('child');你必须把 parent.markModified('exercise');

【讨论】:

我正在尝试使用:``` newExercise.exercise.push(req.body.exercise) newExercise.markModified('exercise') ``` 但它还没有工作。 .. 你能在保存之前附上一个console.log的newExercise const吗? 跟随控制台:``` timestamp: 2021-11-30T16:54:26.622Z, _id: 1, name: 'Exercise 1', exercise: [ exerciseId: 1, period: '夜晚' , ] ``` 我的 req.body.exercise: ``` [ exerciseId: '1', period: 'night' , exerciseId: '2', period: 'day' ] ``` 和你的 const 锻炼从身体中取出?,如果一切正常,尝试像这样推动:req.body.exercise.map(exercise => newExercise.exrcise.pus(exercise)。推动每身体元素

以上是关于通过 mongoose 将项目插入 mongo 数组的主要内容,如果未能解决你的问题,请参考以下文章