“UnhandledPromiseRejectionWarning: CastError: Cast to ObjectId failed for value”
I know there are a lot of version of this question, but I couldn't find anything helping me.
model.js
import mongoose, { Schema } from 'mongoose';
const GroupSchema = new Schema({
name: {
type: String,
required: true,
unique: true,
minLength: [5, 'Name must be 5 characters long'],
},
description: {
type: String,
required: true,
minLength: [10, 'Description must be 10 characters long'],
},
category: {
type: String,
},
meetups: [{
type: Schema.Types.ObjectId,
ref: 'Meetup',
}],
}, { timestamps: true });
/**
* Create a meetup and add it to the meetups array in the group
*/
GroupSchema.statics.addMeetup = async function (id, args) {
const Meetup = mongoose.model('Meetup');
// We add the group id to the meetup group element
// Finally this is the author of the meetup
const meetup = await new Meetup({ ...args, group: id });
// We found the group with the id provide in the url
// And we push the meetup id in the meetups element
const group = await this.findByIdAndUpdate(id, { $push: { meetups: meetup.id } });
return {
meetup: await meetup.save(),
group,
};
};
export default mongoose.model('Group', GroupSchema);
controller.js
export const getGroupMeetups = async (req, res) => {
const { groupId } = req.params;
if (!groupId) {
return res.status(400).json({ error: true, message: 'You need to provided a group id' });
}
// Search for see if group exist
const group = await Group.findById(groupId);
if (!group) {
return res.status(400).json({ error: true, message: 'Group not exist' });
}
try {
return res.status(200).json({
error: false,
meetups: await Meetup.find({ group: groupId }).populate('group', 'name'),
});
} catch (e) {
return res.status(400).json({ error: true, message: 'Cannot fetch meetup' });
}
};