猫鼬-创建和保存文档,然后保存带有ID的新文档

生物薄片

我有一个如下所示的用户架构:

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
    }
})

另外,我还有另一个架构,称为“客户”,看起来像这样:

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

现在,我要做的就是创建用户文档,创建并保存一个新的客户文档,然后将其_id保存到我的用户文档的user_id字段中。

发布请求看起来像这样:

// 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))起作用将具有“空” user_id值。

穆罕默德·亚瑟·艾哈迈迪

像这样尝试

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.");
  }
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章