NodeJS Mongoose Population
Population
There are no joins in MongoDB but sometimes we still want references to documents in other collections.
This is where population comes in
Guide
ref
_author : { type: Number, ref: 'User' }
Example
var mongoose = require('');
var Schema = mongoose.Schema;
var userSchema = Schema({
_id : Number,
name : String,
age : Number,
blogs : [{ type: Schema.Types.ObjectId, ref: 'Blog'}]
});
var blogSchama = Schema({
_creator : { type: Number, ref: 'User'},
title : String,
body : String
});
var Blog = mongoose.model('Blog', blogSchama);
var User = mongoose.model('User', userSchema);
Saving refs
var user1 = new User({ _id: 0, name: 'Alice', age: 17});
user1.save(function(err) {
if (err) return;
});
var blog1 = new Blog({
title : "Today",
_creator: user1._id
});
blog1.save(function(err) {
if (err) return;
});
Population
Retrieve ref
Get User from Blog
Blog.findOne({title: 'Today'})
.populate('_creator')
.exec(function(err, blog) {
console.log('The crator is %s', blog._creator.name);
});
We can use field selection of population
.populate('_creator', 'name') // name only
Query condition
.populate(‘_creator’, ‘name’) // name only
.populate({
match: {age: {$gte: 20}},
options: {limit: 5}
});
Refs
user.blogs.push(blog);
user.save(function(err){
});
Saving refs
var user = new User({_id: 0, name: 'Tifa', age: 19});
user.save(function(err) {
if (err) return;
var blog = new Blog({
title: '',
_creator: user._id
});
blog.save(function(err) {
if (err) return;
});
});
