Robin-Hoodie
Robin-Hoodie

Reputation: 4974

Simple mongoose populate doesn't seem to be working

I have the following 2 schema's

question.js

var mongoose = require('mongoose');
    var Schema = mongoose.Schema;

    var questionsSchema = new Schema({
        nr: Number,
        points: Number,
        description: String,
        isActive: {type: Boolean, required: true, default: true}
    });

    module.exports = mongoose.model('Question', questionsSchema);

round.js

 var mongoose = require('mongoose');

var Schema = mongoose.Schema;


var roundSchema = new Schema({
    name: String,
    index: Number,
    questions: {type: [Schema.Types.ObjectId], ref: 'Question'},
    createdOn: {type: Date, required: true, default: Date.now()},
    isActive: {type: Boolean, required: true, default: true}
});

module.exports = mongoose.model('Round', roundSchema);

There is some data that gets filled correctly, however when I try even the most simple query, it won't even work:

var Round = require('../model/round.server.model.js');

function findAll(req, res) {
        Round.find().populate('questions').exec(function (err, results) {
            if (err) {
                console.log("An error occured when receiving all rounds!", err);
                return res.sendStatus(404);
            }
            console.log(results);
            return res.send(results);
        });
    }

All rounds are retrieved, but the question arrays are empty, even the _id's themselves disappeared

Upvotes: 0

Views: 444

Answers (1)

Jean-Baptiste Louazel
Jean-Baptiste Louazel

Reputation: 525

I think it's because you initialize in the wrong way your population. I understand you want an array of questions in each of your round. Your error seems to be here.

 questions: {type: [Schema.Types.ObjectId], ref: 'Question'}

You should do as following in order to make it work:

 questions: [{type: Schema.Types.ObjectId, ref: 'Question'}]

Because actually, you're making an array of type and this doesn't mean anything.

Upvotes: 1

Related Questions