Не удается передать данные от одного ко многим (nodejs, mongodb)

#javascript #node.js #mongodb #express #relational-database

#javascript #node.js #mongodb #выразить #реляционная база данных

Вопрос:

Я пытаюсь вставить данные в базу данных MongoDB, но получаю сообщение об ошибке Не удается прочитать свойство ‘push’ неопределенного значения.

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

здесь я пытаюсь внедрить сервис в модель категории. для этого я создал отношения «один ко многим» между сервисом и категорией. но я не могу перенести сервисы в категорию.

 Schema design for category amp; Service =======

    const mongoose = require("mongoose")
    const Schema = mongoose.Schema
    
    const CategorySchema = new Schema({
        name:{
            type:String,
            required:true
        },
        services:[
            {
            type:Schema.Types.ObjectId,
            ref:'Service'
        }
    ]
    
    },{ timestamps:true })
    
    const Category = mongoose.model("Cat", CategorySchema);
    module.exports = Category;
    
    
    service======
    const mongoose = require('mongoose')
    const Schema = mongoose.Schema
    
    const serviceSchema = new Schema({
        title:{
            type: 'String',
            required: true
        },
        description:{
            type: 'String',
            required: true
        },
        image: {
            type: 'String',
            required: true
        },
        price: {
            type: 'Number',
            required: true
        },
        category: {
            type:Schema.Types.ObjectId,
            ref:'Cat'
        }
    })
    
    const Service = mongoose.model("Service", serviceSchema);
    module.exports = Service;
 

вот мой сервисный контроллер

 postService:(req, res)=>{
  const { title, price, description,category} = req.body;
  const image = req.file.filename;
  const service = new Service({
    title,
    price,
    category,
    description,
    image,
  });
  service.save()
  .then((service)=>{
      const category = Category.findOneAndUpdate({_id: service.category})
      category.services.push(service)
      category.save()
      console.log(category)
      return res.redirect("/admin/services");
    })
    .catch((err) => {
      console.log(err);
      return res.redirect("/admin/services/create");
    });
},
 

Ответ №1:

сделайте так:

 postService: async(req, res)=>{
  const { title, price, description,category} = req.body;
  const image = req.file.filename;
  const service = new Service({
    title,
    price,
    category,
    description,
    image,
  });
  try {
    await service.save()
    let categoryModel = await Category.findById(category);//category should be an ObjectId
    categoryModel.services.push(service)
    await categoryModel.save()
    return res.redirect("/admin/services");
  } catch (err) {
    console.log(err);
    return res.redirect("/admin/services/create");
  }

},