Skip to content

Instantly share code, notes, and snippets.

@aheckmann
Forked from iamkale/query
Created July 13, 2012 18:00
Show Gist options
  • Save aheckmann/3106334 to your computer and use it in GitHub Desktop.
Save aheckmann/3106334 to your computer and use it in GitHub Desktop.
Populate in mongoose
var mongoose = require('mongoose');
var Event = mongoose.model('Event');
var Calendar = mongoose.model('Calendar');
function eventController(app) {
app.get('/calendar/:calendarid', function (req, res) {
Calendar
.findOne({ _id:req.params.calendarid })
.populate('events')
.exec(function (err, data) {
console.log("executing populate");
if (err) {
return res.json({error:err})
}
return res.json(data)
})
});
exports.boot = eventController;
// Calendar model/schema in one file
exports.boot = function(mongoose) {
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;
var Calendar = new Schema({
creator : { type: Schema.ObjectId, ref: 'User'},
name : { type: String, index:true },
description : String,
events : [{ type: Schema.ObjectId, ref: 'Event'}],
group: [{ type: Schema.ObjectId, ref: 'Group'}],
date : { type : Date, default:Date.now }
});
mongoose.model('Calendar', Calendar);
}
// And in another file the event model/schema
exports.boot = function(mongoose) {
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;
var Event= new Schema({
creator : { type: Schema.ObjectId, ref: 'User'},
name : { type: String, index:true },
description : String,
attendees : [{ type: Schema.ObjectId, ref: 'User'}],
calendar : { type: Schema.ObjectId, ref: 'Calendar'},
date : { type: Date, default: Date.now}
});
mongoose.model('Event', Event);
}
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var assert = require('assert')
console.log('\n===========');
console.log(' mongoose version: %s', mongoose.version);
console.log('========\n\n');
mongoose.connect('localhost', 'testing_weirdpopulateissue');
mongoose.connection.on('error', function () {
console.error('connection error', arguments);
});
var Cal = new Schema({
creator : { type: Schema.ObjectId, ref: 'User'},
name : { type: String, index:true },
description : String,
events : [{ type: Schema.ObjectId, ref: 'Event'}],
group: [{ type: Schema.ObjectId, ref: 'Group'}],
date : { type : Date, default:Date.now }
});
var Calendar = mongoose.model('Calendar', Cal);
var Evt= new Schema({
creator : { type: Schema.ObjectId, ref: 'User'},
name : { type: String, index:true },
description : String,
attendees : [{ type: Schema.ObjectId, ref: 'User'}],
calendar : { type: Schema.ObjectId, ref: 'Calendar'},
date : { type: Date, default: Date.now}
});
var Event = mongoose.model('Event', Evt);
mongoose.connection.on('open', function () {
var e = new Event({ name: 'weirdpopulateissue' });
e.save(function (err) {
if (err) return done(err);
var cal = new Calendar({ events: [e], name: 'my cal' });
cal.save(function (err) {
if (err) return done(err);
Calendar
.findOne({ _id: cal._id })
.populate('events')
.exec(function (err, data) {
if (err) return done(err);
console.error('found', data);
done();
});
})
})
});
function done (err) {
if (err) console.error(err.stack);
mongoose.connection.db.dropDatabase(function () {
mongoose.connection.close();
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment