Mongoose -创建并保存文档,然后保存新文档及其ID

jv4diomz  于 2024-01-08  发布在  Go
关注(0)|答案(1)|浏览(165)

我有一个用户模式,看起来像这样:

const userSchema = new Schema({
    email: {
        type: String,
        required: true,
        unique: true,
        trim: true
    },
    password: {
        type: String,
        required: true
    },
    role: {
        type: String,
        default: 'customer',
        enum: ['customer', 'farmer', 'admin']
    },
    user_id: {
        type: Schema.Types.ObjectId,
        required: true,
        unique: true
    }
})

字符串
此外,我还有另一个名为customer的模式,看起来像这样:

const customerSchema = new Schema({
    company: String,
    contact: String,
    ...etc
})


现在我想做的是在创建User文档时,创建并保存一个新的Customer文档,然后保存it_id到我的User文档的user_id字段中。
post请求看起来像这样:

// POST - USER REGISTRATION
router.post('/register', function (req, res) {
  const { email, password, role } = req.body

    const user = new User({ email, password, role,
    user_id: new Customer({
      company: req.body.company,
      contact: req.body.contact,
      ...etc (rest of data)
    })})

    user.save(function(err) {
      if (err) {
        res.status(500)
          .send("Failed to register. Please try again.")
      } 
      else {
        res.status(200).send("Registered.")
      }
    })
})


虽然这似乎创建了一个Customer对象**(user_id下有一个ObjectID)**,但客户并没有保存到数据库中(自然是因为没有调用.save)。
我最初的方法是将user_id变量设置为null,然后让客户创建并保存自己,然后将user_id变量设置为customer._id值,但这不起作用,因为user.save(func(err))将具有null user_id值。

lxkprmvk

lxkprmvk1#

就像这样

router.post("/register", async function (req, res) {
  try {
    const { email, password, role } = req.body;
    let customer = new Customer({
      company: req.body.company,
      contact: req.body.contact,
    });
    let resultCustomer = await customer.save();

    const user = new User({
      email,
      password,
      role,
      user_id: resultCustomer._id,
    });

    await user.save();
    res.status(200).send("Registered.");
  } catch (error) {
    res.status(500).send("Failed to register. Please try again.");
  }
});

字符串

相关问题