aditya gaddhyan
aditya gaddhyan

Reputation: 73

mongoose populate() returns undefined despite presence of data

blog model:

ar schema_blog=new mongoose.Schema({
    owner:{
        type:mongoose.Schema.Types.ObjectId,
        ref:"User"
    },
    title:String,
    image:String,
    description:String,
    created:{type: Date, default: Date.now},
    likes: Number,
    dislikes: Number,
    comments:[{
        type:mongoose.Schema.Types.ObjectId,
        ref:Comment,
    }]
});
var Blog=mongoose.model("blog",schema_blog);
module.exports=Blog;

comment model:

var schema_comment=new mongoose.Schema({
    text:String,
    created:{type: Date, default: Date.now},
    author:{
        type:mongoose.Schema.Types.ObjectId,
        ref:"User"
    },
    authorName:String
});

When i try to populate comments inside blog, i get an empty object. The id is correct. I dont get what the problem is.

var Comment=mongoose.model("comment",schema_comment);
    Blog.findById(id).populate("comments").exec((err,b)=>{
        console.log(b);
    })

Someone please solve the problem.

Upvotes: 0

Views: 136

Answers (1)

Prathamesh More
Prathamesh More

Reputation: 1499

Update

ref must be String, you passed the undefined variable.

var schema_blog = new mongoose.Schema({
  owner: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "User"
  },
  title: String,
  image: String,
  description: String,
  created: {
    type: Date,
    default: Date.now
  },
  likes: Number,
  dislikes: Number,
  comments: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: "comment", //This must be String
  }]
});
module.exports = mongoose.model("blog", schema_blog);

Populate comments

Blog.findById(req.params.id)
  .populate("comments")
  .exec(function(err, blogs) {
    if (err) {
      console.log(err);
    } else {
      res.render("blogs/show", {
        blog
      });
    }
  });

Upvotes: 1

Related Questions