|
|
var assert = require('assert'); var mongoose = require('../../lib'); var Schema = mongoose.Schema; var ObjectId = mongoose.Types.ObjectId;
/** * Connect to the db */
var dbname = 'testing_populateAdInfinitum_' + require('../../lib/utils').random(); mongoose.connect('localhost', dbname); mongoose.connection.on('error', function() { console.error('connection error', arguments); });
/** * Schemas */
var user = new Schema({ name: String, friends: [{ type: Schema.ObjectId, ref: 'User' }] }); var User = mongoose.model('User', user);
var blogpost = Schema({ title: String, tags: [String], author: { type: Schema.ObjectId, ref: 'User' } }); var BlogPost = mongoose.model('BlogPost', blogpost);
/** * example */
mongoose.connection.on('open', function() { /** * Generate data */
var userIds = [new ObjectId, new ObjectId, new ObjectId, new ObjectId]; var users = [];
users.push({ _id: userIds[0], name: 'mary', friends: [userIds[1], userIds[2], userIds[3]] }); users.push({ _id: userIds[1], name: 'bob', friends: [userIds[0], userIds[2], userIds[3]] }); users.push({ _id: userIds[2], name: 'joe', friends: [userIds[0], userIds[1], userIds[3]] }); users.push({ _id: userIds[3], name: 'sally', friends: [userIds[0], userIds[1], userIds[2]] });
User.create(users, function(err) { assert.ifError(err);
var blogposts = []; blogposts.push({ title: 'blog 1', tags: ['fun', 'cool'], author: userIds[3] }); blogposts.push({ title: 'blog 2', tags: ['cool'], author: userIds[1] }); blogposts.push({ title: 'blog 3', tags: ['fun', 'odd'], author: userIds[2] });
BlogPost.create(blogposts, function(err) { assert.ifError(err);
/** * Population */
BlogPost .find({tags: 'fun'}) .lean() .populate('author') .exec(function(err, docs) { assert.ifError(err);
/** * Populate the populated documents */
var opts = { path: 'author.friends', select: 'name', options: {limit: 2} };
BlogPost.populate(docs, opts, function(err, docs) { assert.ifError(err); console.log('populated'); var s = require('util').inspect(docs, {depth: null, colors: true}); console.log(s); done(); }); }); }); }); });
function done(err) { if (err) console.error(err.stack); mongoose.connection.db.dropDatabase(function() { mongoose.connection.close(); }); }
|