#javascript #mongodb #mongoose-schema #insomnia
Вопрос:
Я пытаюсь сохранить несколько значений в MongoDB в поле встречи, это моя схема:
const MeetingSchema = new mongoose.Schema({
meetings: [
{
name: { type: String, require: true, trim: true },
timer: { type: Number, require: true, trim: true },
},
],
date: { type: Date, default: Date.now, trim: true },
responsible: { type: String, require: true, trim: true },
});
Мой контроллер:
const { name, timer } = req.body;
const response = await MeetingModel.create({
meetings:
{
name: name,
timer: timer,
},
});
return res.status(201).json(response);
Это основная часть моей просьбы, которую я сделал по поводу бессонницы:
{
"name": "Meeting Name",
"timer": 100,
"name": "Meeting Name2",
"timer": 400
}
Результат:
{
"meetings": [
{
"name": "Meeting Name2",
"timer": 400,
"_id": "615618effd96b823d2cf741b"
}
],
"_id": "615618effd96b823d2cf741a",
"date": "2021-09-30T20:07:11.344Z",
"__v": 0
}
Как вы можете видеть, я пытаюсь сохранить несколько данных на собраниях, а не только последние.
Комментарии:
1. Запрос переопределяет имя и значения таймера. Это должен быть массив, если вы хотите хранить несколько значений. И при получении массива контроллер должен быть обновлен, чтобы ожидать его.
2. Моя схема-массив, но все еще не работает.. и, как вы можете видеть, мой результат-массив объектов.
Ответ №1:
const { name, timer } = req.body;
const response = await MeetingModel.create({
$push{
meetings:
{
name: name,
timer: timer,
}
}
});
return res.status(201).json(response);
Когда вы обновляете массив, вам нужно добавить $push для добавления и $pull для удаления
Ссылка: Дополнительная информация
Ответ №2:
Запрос, который вы отправляете
{
"name": "Meeting Name",
"timer": 100,
"name": "Meeting Name2",
"timer": 400
}
переписывает значение для имени и таймера. Это должен быть массив объектов, а не сам объект, еще меньше следует переписывать значения. Чтобы получить желаемое поведение, запрос должен выглядеть следующим образом:
[
{
"name": "Meeting Name",
"timer": 100
},
{
"name": "Meeting Name2",
"timer": 400
}
]
Таким образом, вам также потребуется сменить контроллер. Он должен повторяться по массиву, поэтому код будет выглядеть следующим образом:
req.body.forEach(item => {
const response = await MeetingModel.create({
meetings:
{
name: item.name,
timer: item.timer,
},
});
});
return res.status(201).json(response);