【问题标题】:Unable to create array in MongoDB - MERN stack无法在 MongoDB 中创建数组 - MERN 堆栈
【发布时间】:2021-12-19 06:40:11
【问题描述】:

我正在使用 MERN 堆栈开发票务系统模块。我想在创建 Ticket 时创建一个名为“message”的数组。

当用户点击 Create Ticket 按钮时,我们会在 MongoDB 中存储一些数据,如订单 ID、服务、付款、交易 ID、主题以及用户消息(用户可以简要地写一下该问题)。存储后,管理员可以回复该消息,因此我们需要在一个文档中创建这些论文。

我可以存储其他字段,例如订单 ID、服务名称、主题,但我不知道如何创建用于存储消息的数组。

请帮帮我。

这是我的 Ticket Scheema:

const mongoose = require('mongoose');
const User = require('./userScheema');


const TicketScheema=new mongoose.Schema({
    subject:{
        type:String
    },
    request:{
        type:String
    },
    orderID:{
        type:Number
    },
    descs:[
        {
            desc:
            {
                type:Array,
                required:true
            }
        }
    ],
    name:{
        type:String
    },
    role:{
        type:String
    },
    payment:{
        type:String
    },
    transactionID:{
        type:Number
    },
    status:{
        type:String,
        default:"Not Answered"
    },
    date:{
        type:Date,
        default:Date.now
    },
    user:{
        type:mongoose.Schema.Types.ObjectId,
        ref:User,
        required:true
    }
})

const Ticket=mongoose.model("Ticket",TicketScheema);
module.exports=Ticket;

快速路由器:

router.post("/submitTicket",authenticateUser,async(req,res)=>{
     try {
        let user=req.root_user[0]._id.toString();
        let role=req.root_user[0].role.toString();
        let name=req.root_user[0].name.toString();
        let {subject,request,orderID,desc,payment,transactionID}=req.body;
        let resp=await new Ticket({
            subject,
            request,
            orderID,
            desc, //here desc is the user message, want to store it as array
            payment,
            transactionID,
            user,
            role,
            name
          
        })
        resp.save();
        res.status(201).send(resp)
     } catch (error) {
         res.status(400).send("Unable to create Ticket")
     }
 })

前端:

  const createTicket =async()=>{
        let resp=await fetch('/submitTicket',{
            method:"POST",
            headers:{
                "Content-Type":"application/json"
            },
            body:JSON.stringify({
                subject,request,orderID,desc:Desc,payment:payment1,transactionID:TransactionID
            })
        })
        if(resp.status==201)
        {
            alert("Ticket Created")
        }
    }

我是MERN的新手,请帮助我

【问题讨论】:

  • 第一次创建工单时,将描述字段存储为包含第一个描述的数组,或者如果没有值存储为空数组。稍后的描述,可以在 update 操作中添加到数组中。
  • description 字段是必填的,当用户第一次创建工单时,我们应该将它存储为一个数组。然后管理员可以查看它并重播该描述(消息)。
  • @prasad_ 请帮帮我

标签: node.js mongodb mongoose


【解决方案1】:

您应该将descs 属性声明为:

descs:[
    {
        type:String,
        required:true
    }
],

然后在字段中添加一个新属性:

let resp = new Ticket({
  subject,
  request,
  orderID,
  payment,
  transactionID,
  user,
  role,
  name,
});

resp.descs.push(desc)

await resp.save()

res.status(201).send(resp)

【讨论】:

  • 谢谢。它奏效了
猜你喜欢
  • 1970-01-01
  • 2021-01-04
  • 2020-11-08
  • 1970-01-01
  • 2022-08-07
  • 1970-01-01
  • 2013-08-23
  • 2010-12-08
  • 1970-01-01
相关资源
最近更新 更多