mongoose-nodejs导致超出最大调用堆栈大小,在mongoose保存()中

8tntrjer  于 2023-02-15  发布在  Node.js
关注(0)|答案(2)|浏览(109)

我面临的问题是:

  • 当取消注解第1行和取消注解(记录)第3行和第4行时-它卡在那里,不打印任何东西,过了一段时间后,它给出了超过最大调用堆栈大小的消息,但如果我只打印字符串,它不会给出任何错误。
  • 我尝试了所有测试用例,错误原因是第1行,因为如果我不执行第1行,它将顺利运行
  • 实际上,我想在Booking中添加新预订后,在bookings数组中添加cust(客户)中的预订。
async book(req, res, next) {

  const _id=req.body.id 
     /* I am getting this id From Jwt token,
    (for case I am showing as this )*/

  const category = req.params.category

  try {
       const cust = await Customer.findOne(
         { _id: _id }).populate("bookings")

      const booking = new Booking({
          service: category,
          customer: cust
      })

      await booking.save()//line 0

      cust.bookings.push(booking) //line 1

       await cust.save() //line2

      console.log(cust); //line 3
      console.log(booking); //line 4
      console.log("test"); //line 5


      return res.render("status", )

  } catch (error) {
      console.log(error);

  }
}
    • 这是cust(客户架构)**
const customerSchema = mongoose.Schema({
    email: {
         type: String,

     },
  bookings: [
  {
  type: Schema.Types.ObjectId,
  ref: 'Booking'
 }]})
    • 这是预订方案(Booking)**
const bookingSchema = new Schema({ 
   id: {
    type: String
     },
   service: {
    type: String
    },
    customer: {
    type: Schema.Types.ObjectId,
    ref: 'Customer'
})
    • 因此,我的目标是,每当为特定客户添加预订(预订模型)时,同一预订必须在客户(客户)的预订数组中为该唯一特定客户"引用"(推送)**
    • 为了实现这一目标**
  • 我首先将预订保存在(第0行)
  • 然后在bookings中推送相同的预订(cust(Customer)中的数组)[line 1]
  • 然后将cust(Customer)保存在[line 2]中

超出最大调用堆栈大小

at get (D:\my_proj\node_modules\mongoose\lib\helpers\get.js:8:30)
at isBsonType (D:\my_proj\node_modules\mongoose\lib\helpers\isBsonType.js:10:10)
at clone (D:\my_proj\node_modules\mongoose\lib\helpers\clone.js:75:7)
at cloneObject (D:\my_proj\node_modules\mongoose\lib\helpers\clone.js:125:17)
at clone (D:\my_proj\node_modules\mongoose\lib\helpers\clone.js:60:16)
at cloneObject (D:\my_proj\node_modules\mongoose\lib\helpers\clone.js:125:17)
at clone (D:\my_proj\node_modules\mongoose\lib\helpers\clone.js:60:16)
at cloneObject (D:\my_proj\node_modules\mongoose\lib\helpers\clone.js:125:17)
at clone (D:\my_proj\node_modules\mongoose\lib\helpers\clone.js:60:16)
at cloneObject (D:\my_proj\node_modules\mongoose\lib\helpers\clone.js:125:17)
n6lpvg4x

n6lpvg4x1#

**#1〉**因为您在模式中将bookings对象类型定义为ObjectId,但在line1中您试图推送一个对象。

cust.bookings.push(booking) //line 1

所以试试这个:

cust.bookings.push(mongoose.Types.ObjectId(booking._id)) //line 1

#2〉

并且在这一行中,如果在之后不传递数据,则需要删除逗号。

return res.render("status", )

最好是res.redirect('/route')并渲染路线。

yzxexxkh

yzxexxkh2#

在我自己的例子中,在模型上将strict设置为true的工作原理如下

相关问题