Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

301
Views
CastError: Cast to [undefined] failed for value "[]" (type string) at path "comments.undefined"

I'm quite new to node and mongoose. I'm trying to do a project using them, but i'm running into an error while trying to populate. The comment is saved to the Comment schema perfectly, but throws an error when i reference it Organization Schema.Please advise me on what i'm doing wrong. Any form of assistance will be appreciated.

// Post route for comment(on the Organization's profile page)
router.post('/comment/:id', ensureAuthenticated,(req, res) =>{
  let id = req.params.id;
  console.log(mongoose.Types.ObjectId.isValid(id))
  const commentObject = new Comment({
    sender: 'Fred kimani', 
    commentBody: req.body.commentBody
  })
  console.log(commentObject);
  commentObject.save((err, result) =>{
    if(err){console.log(err)}
    else{
      Organization.findByIdAndUpdate(id, {$push: {comments: result}}, {upsert: true}, (err, organization) =>{
        if(err){console.log(err)}
        else{
          console.log('======Comments====')
        }
      })
      res.redirect('/users/organizationprofilepage/:id')
    }
  })
});

//Organization Schema

const mongoose = require('mongoose');

const OrganizationSchema = new mongoose.Schema({

  organization_name: {
    type: String,
    required: true
  },
  email: {
    type: String,
    required: true
  },
  password: {
    type: String,
    required: true
  },
  date: {
    type: Date,
    default: Date.now
  },
  category: {
    type: String,
    required: true
  },
  isApproved: {
    type: Boolean,
    default: false
  },
  image:{
    type:String,
    required:true
  },
  description: {
    type: String,
    required: true,
  }, 
  comments: [{
    type: mongoose.Types.ObjectId,
    ref: 'Comment'
  }],
  
},
//{ typeKey: '$type' }
);


OrganizationSchema.statics.getOrganizations = async function () {
  try {
    const organizations = await this.find();
    return organizations;
  } catch (error) {
    throw error;
  }
}

//defines the layout of the db schema

const Organization = mongoose.model('0rganization', OrganizationSchema);
module.exports = Organization;

//Comment schema

const mongoose = require('mongoose');


const CommentSchema =  mongoose.Schema({

    sender: {
      type: String,
    }, 
    commentBody: { 
      type: String,
      required: false,
    },
    date: {
      type: Date,
      default: Date.now
    },
  })


  CommentSchema.statics.getComments= async function () {
    try {
      const comments = await this.find();
      return comments ;
    } catch (error) {
      throw error;
    }
  }

  const Comment= mongoose.model('Comment', CommentSchema);
  module.exports = Comment;

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

  1. Try to change the comments type to mongoose.Schema.Types.ObjectId:
comments: [
    {
      type: mongoose.Schema.Types.ObjectId,
      ref: 'Comment',
    },
  ],
  1. Try to push the new commend _id into the Organization object after its creation, not the whole object:
commentObject.save((err, result) => {
  if (err) {
    console.log(err);
  } else {
    Organization.findByIdAndUpdate(
      id,
      { $push: { comments: result._id } }, // <- Change this line
      { upsert: true },
      (err, organization) => { }
    );
    ...
  }
});
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!