Вставка элементов в массив mongo с помощью мангуста

#node.js #mongodb #mongoose #schema

#node.js #mongodb #мангуст #схема

Вопрос:

У меня есть коллекция монго, как показано ниже:

 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) =gt; {  const {  name,  exercise: [{ exerciseId, period }],  } = req.body;  const newExercise = new Exercise({  name,  exercise: [{ exerciseId, period }],  });  newExercise.save((err, data) =gt; {  if (err) {  res.status(500).send({ message: err });  return;  }  res  .status(200)  .send({  message: "Success",  });  }); };  

Obs: Я имею в виду свою схему упражнений от контроллера под «новым упражнением (…)».

Ответ №1:

используйте его для обновления массивов:

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

в вашем случае дочерним является массив упражнений, а в parent.markModified («ребенок»); вы должны поместить parent.markModified («упражнение»).;

Комментарии:

1. Я пытаюсь сделать с: « newExercise.упражнение.толчок(req.body.упражнение) newExercise.markModified (`упражнение»)»», но это еще не сработало…

2. можете ли вы подключить консоль. журнал новой константы перед сохранением?

3. следуйте за консолью: « { метка времени: 2021-11-30T16:54:26.622 Z, _id: 1, имя: ‘Упражнение 1’, упражнение: [ { exerciseId: 1, период: ‘ночь’ }, {} ] } «

4. Мое тело.упражнение: « [ { Упражнение: ‘1’, период: ‘ночь’ }, { Упражнение: ‘2’, период: ‘день’} ] «

5. и ваше постоянное упражнение возьмите из тела?, если все в порядке, попробуйте нажать вот так: req.body.exercise.map(упражнение =gt; { newExercise.exrcise.pus(упражнение)}. толкает каждый элемент тела