我在尝试将todo发布到数据库时出错。ValidationError:TodoTask验证失败:user:值转换为ObjectId失败
id: 62e02a03c5f6c427c8c3ed44,
user: {
_id: 62e02a03c5f6c427c8c3ed44,
name: 'abc',
email: 'someemail@example.com',
password: '$2a$10$C....',
admin: true,
date: 2022-07-26T17:53:07.645Z,
__v: 0
}
}"(type Object) at path "user"
我发布请求的功能:
const todoTask = await new TodoTask({
content: req.body.content,
user: {
id: req.user._id,
user: req.user,
},
});
try {
await todoTask.save(function (err, doc) {
if (err) throw err;
console.log("item saved!");
});
return res.redirect("/dashboard");
} catch (err) {
return res.redirect("/dashboard");
console.log(err);
}
};
模式定义为:
content: {
type: String,
required: true,
},
date: {
type: Date,
default: Date.now,
},
user: {
type: mongoose.Schema.Types.ObjectId,
ref: "User",
},
});
module.exports = mongoose.model("TodoTask", todoTaskSchema);
由于user
属性被定义为ref
,您应该只将_id
存储在其中:
const todoTask = await new TodoTask({
content: req.body.content,
user: req.user._id,
});
try {
await todoTask.save(function (err, doc) {
if (err) throw err;
console.log("item saved!");
});
return res.redirect("/dashboard");
} catch (err) {
return res.redirect("/dashboard");
console.log(err);
}
};
当检索用户信息时,您只需要populate
和TodoTask
,例如:
const totoTask = await TodoTask.populate('user').exec();