转换为 ObjectID 失败 - 猫鼬

时间:2021-01-18 14:21:59

标签: javascript node.js mongodb express mongoose

您好,我正在尝试在用户单击事件后将事件添加到用户个人资料中。我收到以下错误 - 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'); 
    }

});

任何帮助将不胜感激。

2 个答案:

答案 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 });