#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(упражнение)}. толкает каждый элемент тела