請幫我解決這個問題。我有一個帖子查詢,我想將它分別保存到兩個表中。但是我遇到了來自郵遞員的錯誤訊息“Cast to [ObjectId] failed for value”請幫助我!謝謝!
下面是我的代碼:
第一模型
const mongoose= require('mongoose');
const { Schema } = mongoose;
const class = require('./classModel');
const SubjectSchema = new mongoose.Schema({
name: {
type: String,
unique: true
},
address: {
type: String,
},
classes: [ { type: Schema.Types.ObjectId, ref: class.schema } ]
})
第二個模型
const classSchema = new mongoose.Schema({
name: {
type: String,
unique: true
},
})
這是我的控制器
exports.create = catchAsync (async (req, res, next) => {
const newSubject = await Subject.create(req.body)
let payload = {
body : {
...req.body.classes,
_id: new mongoose.Types.ObjectId(),
golf_course_id: newGolfCourse._id
}
}
const newClass = await Class.createClass(payload)
if(!newClass ) {
res.status(201).json({
status: 'success',
data : {
subject: newSubject
}
})
}
})
uj5u.com熱心網友回復:
這是因為您試圖classes在您Subject擁有ObjectIds. 在你的Subject Schema你有以下行:
classes: [ { type: Schema.Types.ObjectId, ref: class.schema } ]
這告訴 Mongoose 您正在參考另一個分配了它的模型,ObjectId但在您嘗試保存它時:
await Subject.create(req.body)
這些類還沒有 ID,因此您需要創建它們。當貓鼬自己設定它們時,我不會手動設定它們。因此,以下將是一個建議。
try {
const classes = req.body.classes.map(async (className) => {
const newClass = new Class({ name: className });
newClass.golf_course_id = newGolfCourse._id;
await newClass.save();
return newClass;
});
const results = await Promise.all(classes);
const newSubject = await new Subject({
name: req.body.name,
address: req.body.address,
classes: results,
});
res.send(newSubject);
} catch (error) {
console.log(error);
}
此方法像您在代碼中一樣創建類,但是在創建類后將類提供給主題,這樣就Subject可以使用它們。否則你會得到一個ObjectId錯誤,因為你不能分配一個帶有參考的欄位,例如classes: [ { type: Schema.Types.ObjectId, ref: class.schema } ]沒有一個reference到那個專案。順便說一句,在你ref: class.schema剛剛使用ref: 'Class'
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/459377.html
