|
|
var assert = require('assert') var mongoose = require('../'); 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, docs) { 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, docs) { 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 }) console.log(s); done(); }) }) }) }) });
function done(err) { if (err) console.error(err.stack); mongoose.connection.db.dropDatabase(function() { mongoose.connection.close(); }); }
|