Почему $ push не добавляет newCategory

Я хочу переместить новую категорию в существующую, но она не делает этого и возвращает пустой массив.

Я также пробовал это с .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 не имеет смысла. В это время должно работать прямое назначение.

Shumi Gupta 24.12.2018 12:47

но я также хочу сохранить следующие категории в том же массиве категорий. когда я его назначу, он потеряет предыдущие категории.

Gouri Shankar 24.12.2018 13:21

При его создании вы можете назначить, а при обновлении используйте $ push, чтобы вставить значение в массив. Посмотрите на концепцию, лежащую в основе этого: когда вы создаете документ, у вас нет никакого массива, в который вы можете отправлять данные, это причина, по которой $ push не работает в create, где, как когда вы обновляете документ с помощью findOneAndUpdate или обновляете вас может иметь массив, чтобы вы могли вставлять в него свои значения.

Shumi Gupta 24.12.2018 14:25
Поведение ключевого слова "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) для оценки ваших знаний,...
0
3
32
0

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