Я хочу переместить новую категорию в существующую, но она не делает этого и возвращает пустой массив.
Я также пробовал это с .save(), но это не сильно помогло.
// отправляем маршрут
router.post('/category', middleware.isAdmin, upload.single('category[image]'), async function(req,res, next){
try {
let result = await cloudinary.v2.uploader.upload(req.file.path,{ // upload image to cloudinary
folder: 'category_images',
use_filename: true
});
let categories = await Category.find({});
let i = await categories.findIndex((e) => e.name === req.body.category.name); // find if category name already exits
if (i === -1){
let newCategory = { //create new category name
name : req.body.category.name,
image : result.secure_url,
imageId : result.public_id
};
// categories.push(newCategory);
// categories.save();
// // Category.save();
await Category.findOneAndUpdate({_id: req.user.cart.id}, {$push: {categories: newCategory}}); // push the newCategory to existing category array
let categories = await Category.find({});
console.info(categories);
req.flash('success','category added to db');
console.info(categories);
}
else {
req.flash('error', 'categorory already exits');
}
res.redirect('back');
}
catch(err){
req.flash('error', err.message, err.name);
console.info(err);
res.redirect('back');
}
});
// схема мангуста
var mongoose = require("mongoose");
var categorySchema = new mongoose.Schema ({
categories : [
{
name: String,
image : String,
ImageId : String
}
]
}
);
module.exports = mongoose.model('Category', categorySchema);
он возвращает [], когда я делаю Category.find({}).
но я также хочу сохранить следующие категории в том же массиве категорий. когда я его назначу, он потеряет предыдущие категории.
При его создании вы можете назначить, а при обновлении используйте $ push, чтобы вставить значение в массив. Посмотрите на концепцию, лежащую в основе этого: когда вы создаете документ, у вас нет никакого массива, в который вы можете отправлять данные, это причина, по которой $ push не работает в create, где, как когда вы обновляете документ с помощью findOneAndUpdate или обновляете вас может иметь массив, чтобы вы могли вставлять в него свои значения.



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


Вместо того, чтобы нажимать, просто попробуйте напрямую присвоить значение ключу категорий. Это потому, что пока вы создаете документ, $ push не имеет смысла. В это время должно работать прямое назначение.