在Mongoose中推送ObjectId

时间:2018-01-23 14:53:13

标签: javascript node.js express mongoose passport.js

我使用快递,护照和猫鼬。我不知道为什么,但下面的代码将newTaxReturn._id两次推送到user.taxReturnIds字段。如果我删除user.save().catch(() => {})行,则会正确推送newTaxReturn._id,即只推送一次。用户参数来自护照。

问题:

const createTaxReturn = ({ user }) => {
  const newTaxReturn = new TaxReturn({ userId: user._id })
  user.taxReturnIds.push(newTaxReturn._id)
  user.save().catch(() => {})
  return newTaxReturn.save().catch(() => {})
}

架构:

const User = new mongoose.Schema({
  taxReturnIds: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'TaxReturn',
  }],
})

const TaxReturn = new mongoose.Schema({
  userId: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'User',
  },
})

1 个答案:

答案 0 :(得分:1)

在你回来的时候,你也会调用.save()这样复制和删除时的单个输入

user.save().catch(() => {})

将你的回报放在.then或.catch中以从mongo

中检索回复
user.save().catch(error => { if (error) return error })