Я пытаюсь добавить массив в существующий вложенный документ в 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) => {
});
};
Он ничего не добавляет в БД, у кого-нибудь есть идеи?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


С мангустом вам нужно обновить весь объект. Итак, сначала вы получаете элемент с помощью 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();
});
};
Тоже не работает. Постоянно говорит мне: «Невозможно прочитать свойство «push» из null»
Это потому, что он не находит объект. убедитесь, что вы получаете идентификатор хорошо. Проверьте, имеет ли ошибка какое-либо значение, и распечатайте ее. И толчок должен быть сделан в поле сообщений, но ошибка не в этом.
Идентификатор получен хорошо, поэтому я не знаю, в чем проблема
Убедитесь, что идентификатор существует в этой коллекции в базе данных, и убедитесь, что вы хорошо передаете коллекцию элементов... Ошибка печати и myItem, чтобы знать, что происходит. Дайте некоторые подсказки
Идентификатор существует в коллекции, и и myItem, и error возвращают значение null.
Попробуйте найти и посмотрите, найден ли документ
Если я выполняю «поиск» по идентификатору основного документа, он их находит, но если я «нахожу» по идентификатору вложенных документов, он их не находит.
Я забыл скобку. На самом деле, поскольку здесь вы не используете промисы, необходим обратный вызов. Попробуй это сейчас