【问题标题】:Mongoose - creating and saving a document, then saving new document with its idMongoose - 创建和保存一个文档,然后用它的 id 保存新文档
【发布时间】:2021-05-15 10:24:27
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript node.js mongodb express mongoose


    【解决方案1】:

    就这样试试

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

    【讨论】:

    • 谢谢你,成功了。我还对其进行了更改,以便仅在保存用户文档后才保存客户。
    猜你喜欢
    • 2016-08-10
    • 2017-10-06
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 2014-11-08
    • 1970-01-01
    相关资源
    最近更新 更多