[英]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.