|
|
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();
|
|
});
|
|
}
|