Replace Mongoose 4+ population with virtual attributes that can be populated in either direction.
Note: This module changes the functionality of .populate()
. You must populate
virtual attributes instead of ObjectId attributes, and adding a ref
option
to ObjectId attributes no longer does anything.
Wrap mongoose:
var mongoose = require('mongoose-populate-virtuals')(require('mongoose'));
Create document references to populate by defining
virtual attributes with
ref
, localKey
and foreignKey
options.
AuthorSchema.virtual('books', {
ref: 'Book',
foreignKey: 'authorId',
localKey: '_id'
});
AuthorModel.find().populate('books').exec(...);
Remember virtual attributes
are not persisted to the DB. Virtuals are not included in the model's
.toObject()
or .toJSON()
methods unless the options include { virtuals: true }
.
Options for populate virtuals:
ref
Name of the mongoose model (required).foreignKey
Key on the model of the populated virtual (required).localKey
Key on the model being populated (required).match
Query used for find()
or fineOne
.options
Mongo options such as sort
and limit
.select
Mongoose's .select()
argument.singular
Use singular reference instead of array.