Home > Software engineering >  Cast to ObjectId failed for value (type Object) at path "_id" for model "User" i
Cast to ObjectId failed for value (type Object) at path "_id" for model "User" i

Time:10-03

Am trying to use the userId from the Params to fetch that particular user friends.

    router.get("/friends/:userId", async (req, res) => {
    try {
    const user = await User.findById({userId:req.params.userId});
    const friends = await Promise.all(
      user.following.map((friendId) => {
        return User.findById(friendId);
      })
     );
    let friendList = [];
    friends.map((friend) => {
      const { _id, username, profilePicture } = friend;
      friendList.push({ _id, username, profilePicture });
    });
    res.status(200).json(friendList)
    console.log(friendList)
    } catch (err) {
    res.status(500).json(err);
    console.log(err)
    }
    });

But I get this error

    CastError: Cast to ObjectId failed for value "{ userId: '61543261597a97bfdf670f0b' }" (type Object) at path "_id" for model "User"

friends data in my when I Log it out to see...

    [
    undefined,
    {
    _id: new ObjectId("6154346027ecc696433f5b86"),
    username: 'Hemmyhtec',
    email: '[email protected]',
    password: '$2b$10$wVkZGu4PxlmW3geXfeBwHOxGeK6v7wyjyV7xeLzBNWQSeg5LtA.eW',
    profilePicture: 'logo3.jpg',
    coverPicture: '',
    followers: [ '', '61543261597a97bfdf670f0b' ],
    following: [ '' ],
    isAdmin: false,
    createdAt: 2021-09-29T09:39:44.199Z,
    updatedAt: 2021-10-02T20:25:38.569Z,
    __v: 0
   }
   ]

CodePudding user response:

Replace this

user.following.map((friendId) => {
return User.findById(friendId);

})

with

user.following.map((friendId) => {
if(!friendId) return
return User.findById(friendId);

})

CodePudding user response:

When you use findById(), your should pass only the value of the _id and not the object userId with that value. Change your code like this:

const user = await User.findById(req.params.userId);
  • Related