Mongoose无法将文档保存到数据库中以用于特定集合

时间:2017-10-31 09:04:17

标签: node.js mongodb mongoose

我有一个功能

function generateInvoice(data) {
  const cdate = new moment.tz('GMT').toDate();
  let invoiceData = {
    date: cdate,
    paidStatus: true,
    amount: data.amount,
    userId: data.userId
  }

  if (data.planName && data.planTypeName) {
    invoiceData.item = `${data.planName} - ${data.planTypeName}`
    invoiceData.quantity = data.seats || data.slots;
  }
  if (data.credits) {
    invoiceData.item = 'Credits';
    invoiceData.quantity = data.credits;
  }

  return Invoice.create(invoiceData).then((data)=>{
    data.invoiceId = data._id.toString().slice(-5);
    return data.save().then((data)=>{console.log(data); return data.invoiceId}).catch((err)=>{
      throw new ErroWithStatusCode(500, 'Sorry, we seem to be facing some issue right now. Please, try again later.', err);
    })
  })
}

这就是我使用此功能的方式

return generateInvoice(invoiceData).then((data)=>{
    newBooking.orderId = data;
    id = data;
    return newBooking.save().then((booking) => {
      return booking;
    }).catch((err) => {
      throw new ErroWithStatusCode(500, 'Sorry, we are facing some issue right now. Please try again later.')
    })
});

问题是我无法在invoiceData集合中找到invoicesdata块的回调函数中的then是文档,但我无法在发票集合中找到相同的文档。

所有承诺都得到了解决。它不在catch块中,我从Invoice.create(invoiceData)收到有效数据。

此外,newBooking.save()功能正在按预期工作。那么,最让我困扰的是什么,为什么它不能用于一个特定的系列。

背后的原因是什么?

编辑:这是发票架构

const InvoiceSchema = new Schema({
  item: String,
  paidStatus: Boolean,
  quantity: String,
  amount: Number,
  invoiceId: String,
  userId: {type: mongoose.Schema.Types.ObjectId, ref: 'User'},
  date: {type: Date, default: Date.now()},
  __v: {type: Number, select: false}

}, {strict: true})

export default mongoose.model('Invoice', InvoiceSchema);

我没有收到任何错误,预订成功。我尝试记录then块中收到的数据,这是一个有效的文档,正如我上面已经提到的那样。

编辑:以下是使用generateInvoice函数的完整代码: book.js

1 个答案:

答案 0 :(得分:1)

Insted of

return Invoice.create(invoiceData).then((data)=>{...

尝试

new Invoice(invoiceData).save((err,data)=>{
    if(err) return console.log(err);
    return data._id;
})