簡體   English   中英

ZCCADCDEDB567ABAE643E15DCF0974E503Z - 創建和保存一個文檔,然后用它的 id 保存新文檔

[英]Mongoose - creating and saving a document, then saving new document with its 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
})

現在我想做的是創建用戶文檔,創建並保存一個新的客戶文檔,然后將 itd _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.")
      }
    })
})

雖然這似乎創建了一個客戶 object(在 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.");
  }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM