#javascript #node.js #mongodb #mongoose #nosql
Вопрос:
У меня есть простой объект, в котором хранятся два значения внутри, каждое из которых является значением req.body из данных, отправленных клиентом.
const pushedVote = { answer: req.body.answer, text: req.body.value }
Теперь, когда я вызываю findByIdAndUpdate
метод, он выглядит так (моей моделью является опрос).
//insert answer and text await Poll.findByIdAndUpdate(req.body.id, { $push: { responseAnswers: pushedVote, }, });
Все это прекрасно работает, но странно то, что в обновленном массиве моей базы данных будет храниться ТОЛЬКО первая пара ключ-значение в объекте. Например, если сохраняемый объект pushedVote имеет ответ «A», а текст «Cat», база данных будет хранить только «A», а не » Cat » вместе с ним. Я что-то здесь упускаю?
Комментарии:
1. Я предполагаю, что
responseAnswers
это набор голосов? Если это так, то, возможно, лучше сделать это в 3 этапа, чтобы все было в порядке. 1.const poll = awat Poll.findOne({ _id: mongoose.Types.ObjectId(req.body.id) });
2.poll.responseAnswers.push(pushedVote);
3.await poll.save();
2. @KingJ это тоже работает, но происходит то же самое. В моей базе данных объект, помещенный в
responseAnswers
массив, содержит только ключ ответа, а не как ответ, так и текстовый ключ3. И вы подтвердили, что
req.body.value
это существует в запросе и доступно вpushedVote
объекте, прежде чем обновлять базу данных? Еще одна вещь, которую нужно проверить, — поддерживает ли ваша схема этоtext
свойство.4. @Kingj вау, я не могу поверить, что забыл добавить это свойство текста в схему. Спасибо за помощь
5. Не беспокойтесь! Рад, что все улажено!
Ответ №1:
Согласно моему комментарию, убедитесь, что text
свойство определено в схеме Мангуста, иначе оно не будет сохранено в базе данных.