You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

134 lines
2.6 KiB

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