Search code examples
mongodbmongoosemongoose-schemamongoose-populate

Mongoose Populate Returning ObjectIds and Empty Arrays


I have an Collection Model that has a property of items that holds an array of Item Models.

const CollectionSchema = new mongoose.Schema({
    title: {
        type: String,
        required: true
    },
    items : [{type : mongoose.Schema.Types.ObjectId, ref: 'Item'}]
});

I tried to populate the items array in order to get the objectId's properties, but the items array would return back empty. (The code below is how I populated the items array. I first found the collection I was looking for by the _id using the req.body.search. I then ran .populate("items") in order to populate the items array. What I got back was an empty items array.)

userRouter.post('/iList', passport.authenticate('jwt', {session: false}), (req, res) => {
    Collection.findById({_id : req.body.search}).populate("items").exec((err, document) => {
        if(err)
            res.json(err)
        else
            res.json({item: document})
    })
});

I know my items array isn't empty since I can check on mongoDB that it is full. The image of my mongoDB collection with an items array that isn't empty.

The weird thing is that if I put "collections" into the .populate params, my Items array does return with stuff, but it only returns the ObjectIDs and not actual object properties. I am confused to why .populate("items") isn't working.


Solution

  • Never mind. The issue was when I pushed the Item Models via mongoose, I forgot to do items.save() which meant the items array held nothing.