Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

CastError: Cast to ObjectId failed for value "ObjectId(610f16a6ba0d5fc2d4593093)"

I’m trying to query into my event model using a reference Id for ‘artist’ so I can display all the events hosted by a given artist but am receiving a cast error. My fourth line below is how I’m trying to pull in events associated with a given artist:

module.exports.showArtist = async (req, res,) => {
    const artist = await Artist.findById(req.params.id).populate('events');
    const artistId = "ObjectId(" + req.params.id + ")";
    const event = await Event.find( { "artist": artistId });
    if (!artist) {
        req.flash('error', 'Cannot find that Artist');
        return res.redirect('/artists');
    }
    res.render('artists/show', { artist });
}

Both models are required at the top of my code:

const Artist = require('../models/artist');
const Event = require('../models/event');

Here’s how one of my mongodb event docs looks – artist is towards the bottom:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

{ "_id" : ObjectId("6138c78e15832f41e263c601"), 
    "geometry" : 
        { "type" : "Point", 
          "coordinates" : [ -97.748541, 30.269936 ] 
         },
    "event_name" : "Friday night show", 
    "location" : "Austin, Tx 78745", 
    "description" : "Show at our Sam's Town Point", 
    "event_start" : ISODate("2021-09-11T03:00:00Z"), 
    "event_end" : ISODate("2021-09-11T04:25:00Z"), 
    "image" : "https://starbar.com", 
    "created" : ISODate("2021-09-08T14:24:14.399Z"), 
    "artist" : ObjectId("610f16a6ba0d5fc2d4593093"), 
    "__v" : 4, 
    "notification" : "30" 
}

Here’s the full error – what am I doing wrong?

CastError: Cast to ObjectId failed for value "ObjectId(610f16a6ba0d5fc2d4593093)" (type string) at path "artist" for model "Event"

>Solution :

module.exports.showArtist = async (req, res,) => {
const artist = await Artist.findById(req.params.id).populate('events');
const artistId = artist._id;
const event = await Event.find( { "artist": artistId });
if (!artist) {
    req.flash('error', 'Cannot find that Artist');
    return res.redirect('/artists');
}
res.render('artists/show', { artist });
}

when you use a findById you don’t need to recast a finded _id

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading