您好,我正在尝试在用户单击事件后将事件添加到用户个人资料中。我收到以下错误 - Cast to ObjectId 因值“{ event: '600066640807165d042b91dd' }”在路径“event”中失败。创建配置文件和创建事件的路径按预期工作。 600 是我创建的事件的 ID,我现在正尝试将该事件推送到用户配置文件中,但它不起作用。
这是我的代码
配置文件架构
const mongoose = require('mongoose');
const ProfileSchema = new mongoose.Schema({
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'user'
},
event: [
{
type: mongoose.Schema.Types.ObjectId,
ref:'event'
}
],
location: {
type: String,
required: true,
},
company: {
type: String
},
date: {
type: Date,
default: Date.now
}
});
module.exports = Profile = mongoose.model('profile', ProfileSchema);
事件架构
const mongoose = require('mongoose');
const EventSchema = new mongoose.Schema({
timeOfEvent: {
type: String,
required: true,
},
dateOfEvent: {
type: String,
required: true,
},
title: {
type: String,
required: true
},
location: {
type: String,
required: true
},
speaker: {
name: {
type: String,
required: true
},
bio: {
type: String,
required: true
},
interests: {
type: String,
required: true
}
},
date: {
type: Date,
default: Date.now
}
});
module.exports = Event = mongoose.model('event', EventSchema);
路线
// @route PUT api/profile/me/addEvent
// @desc PUT current users profile
// @access Private
router.put('/me/addEvent', auth, async (req, res) => {
const event = req.body;
const profileFields = {};
if(event) profileFields.event = event;
try {
let profile = await Profile.findOne({ user: req.user.id });
if(profile) {
profile = await Profile.findOneAndUpdate( { user: req.user.id }, { $push: {"event": event}}, { new: true });
res.status(201).send(profile);
}
} catch (err) {
console.error(err.message);
res.status(500).send('Server Error');
}
});
任何帮助将不胜感激。
答案 0 :(得分:0)
可以使用push方式并保存
if(profile) {
profile.event.push(/*Event ID*/);
await profile.save();
res.status(201).send(profile);
}
答案 1 :(得分:0)
你应该传递一个对象 id 给事件,req.body
是一个用于获取事件的 objectId 的对象
let {event} = req.body
profile = await Profile.findOneAndUpdate( { user: req.user.id }, { $push: {"event": event}}, { new: true });