Добавить массив в поддокумент Mongoose

Я пытаюсь добавить массив в существующий вложенный документ в Mongoose с помощью Express, но я не могу понять это.

Это моя модель мангуста:

var subitems = new mongoose.Schema({
  _id: ObjectId,
  title: String,
  messages: Array
});

var menuItems = new mongoose.Schema({
  title : String,
  subitem: [subitems]
}, {collection: 'menu_items'});

module.exports = mongoose.model("menu_items", menuItems);

Я использую идентификатор из поддокумента для обновления определенного элемента в «подэлементе». Это экспресс-обновление:

postController.postArticles = function(req, res,item) {
  var id = req.body.id;
  var saveData = {
    title: req.body.title,
    text: req.body.text
  };
  item.update({_id: id}, {$push:{messages: saveData}},(err, result) => {
  });
};

Он ничего не добавляет в БД, у кого-нибудь есть идеи?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
96
1

Ответы 1

С мангустом вам нужно обновить весь объект. Итак, сначала вы получаете элемент с помощью find или findOne, затем вам нужно добавить элемент в массив с помощью push, и, наконец, вы вызываете метод .save() объекта мангуста. Что-то вроде этого:

postController.postArticles = function(req, res,item) {
  var id = req.body.id;
  item.findOne({_id: id}, function(error, myItem) {
    var saveData = {
      title: req.body.title,
      text: req.body.text
    };
    myItem.messages.push(saveData);
    myItem.save();
  });
};

Я забыл скобку. На самом деле, поскольку здесь вы не используете промисы, необходим обратный вызов. Попробуй это сейчас

David Vicente 21.01.2019 15:28

Тоже не работает. Постоянно говорит мне: «Невозможно прочитать свойство «push» из null»

Larsmanson 21.01.2019 15:41

Это потому, что он не находит объект. убедитесь, что вы получаете идентификатор хорошо. Проверьте, имеет ли ошибка какое-либо значение, и распечатайте ее. И толчок должен быть сделан в поле сообщений, но ошибка не в этом.

David Vicente 21.01.2019 15:45

Идентификатор получен хорошо, поэтому я не знаю, в чем проблема

Larsmanson 22.01.2019 08:56

Убедитесь, что идентификатор существует в этой коллекции в базе данных, и убедитесь, что вы хорошо передаете коллекцию элементов... Ошибка печати и myItem, чтобы знать, что происходит. Дайте некоторые подсказки

David Vicente 22.01.2019 09:23

Идентификатор существует в коллекции, и и myItem, и error возвращают значение null.

Larsmanson 22.01.2019 09:34

Попробуйте найти и посмотрите, найден ли документ

David Vicente 22.01.2019 09:54

Если я выполняю «поиск» по идентификатору основного документа, он их находит, но если я «нахожу» по идентификатору вложенных документов, он их не находит.

Larsmanson 22.01.2019 10:06

Другие вопросы по теме