William Kennedy
William Kennedy

Reputation: 143

Mongoose populated is not working

Mongoose populated documentation:

Model.findOne().populate('author').exec(function (err, doc) {
    console.log(doc.author.name)         // Dr.Seuss
    console.log(doc.populated('author')) // '5144cf8050f071d979c118a7'
})

My code:

Job.find({operator: user.operator, status: {$nin: ['assigned', 'unassigned', 'completed']}})
        .populate('version', 'results.routes')
        .exec(function(err, jobs)
        {
            console.log(jobs.populated('version'))
            ...

I have been getting this error when the code runs: TypeError: jobs.populated is not a function

Why am I getting this error? What am I doing wrong here? Thanks in advance.

EDIT: Posting Job model:

var JobSchema = new Schema(
    {
        created: Date,
        received: Date,
        due_date: Date,
        freight: Number,
        creator: { type: mongoose.Schema.ObjectId, ref: 'User' },
        operator: { type: mongoose.Schema.ObjectId, ref: 'Operator' },
        routing: { type: mongoose.Schema.ObjectId, ref: 'Routing' },
        version: { 
            type: mongoose.Schema.ObjectId, ref: 'Version',
            validate: [validateStarredVersion, 'You must star this route before monitoring it.']
        },
        ...

The version model:

var VersionSchema = mongoose.Schema(
{
    routing: { type: mongoose.Schema.ObjectId, ref: 'Routing' },
    name: String,
    number: Number,
    date: Date,
    tags: [String],
    results:
    {
        routes:
        [ resultSchema ],
    ...

resultsSchema:

var resultSchema = new Schema(
{
    name: String,
    vehicle: mongoose.Schema.Types.Mixed,
    distance: Number,
    weight: Number,
    volume: Number,
    capacity_weight: Number,
    capacity_volume: Number,
    occupancy_weight: Number,
    occupancy_volume: Number,
    job: { type: mongoose.Schema.ObjectId, ref: 'Job' },
    operator: mongoose.Schema.Types.Mixed,
    delivery_order:
    [
        {
            delivery: mongoose.Schema.Types.Mixed,
            depot: mongoose.Schema.Types.Mixed,
            arrival_time: Date
        }
    ],
    directions: [ directionSchema ]
});

I have not edited with the entired object because it's too large. I put only the related information.

Upvotes: 0

Views: 627

Answers (1)

chrisbajorin
chrisbajorin

Reputation: 6153

The documentation uses findOne(), while your code uses find(). This means the variable jobs isn't a mongoose document, but an array of mongoose documents. The native Array doesn't have a method .populated()

Upvotes: 1

Related Questions