12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- var mongoose = require('../../lib')
- var Schema = mongoose.Schema;
- console.log('Running mongoose version %s', mongoose.version);
- /**
- * Console schema
- */
- var consoleSchema = Schema({
- name: String
- , manufacturer: String
- , released: Date
- })
- var Console = mongoose.model('Console', consoleSchema);
- /**
- * Game schema
- */
- var gameSchema = Schema({
- name: String
- , developer: String
- , released: Date
- , consoles: [{ type: Schema.Types.ObjectId, ref: 'Console' }]
- })
- var Game = mongoose.model('Game', gameSchema);
- /**
- * Connect to the console database on localhost with
- * the default port (27017)
- */
- mongoose.connect('mongodb://localhost/console', function (err) {
- // if we failed to connect, abort
- if (err) throw err;
- // we connected ok
- createData();
- })
- /**
- * Data generation
- */
- function createData () {
- Console.create({
- name: 'Nintendo 64'
- , manufacturer: 'Nintendo'
- , released: 'September 29, 1996'
- }, function (err, nintendo64) {
- if (err) return done(err);
- Game.create({
- name: 'Legend of Zelda: Ocarina of Time'
- , developer: 'Nintendo'
- , released: new Date('November 21, 1998')
- , consoles: [nintendo64]
- }, function (err) {
- if (err) return done(err);
- example();
- })
- })
- }
- /**
- * Population
- */
- function example () {
- Game
- .findOne({ name: /^Legend of Zelda/ })
- .populate('consoles')
- .lean() // just return plain objects, not documents wrapped by mongoose
- .exec(function (err, ocinara) {
- if (err) return done(err);
- console.log(
- '"%s" was released for the %s on %s'
- , ocinara.name
- , ocinara.consoles[0].name
- , ocinara.released.toLocaleDateString());
- done();
- })
- }
- function done (err) {
- if (err) console.error(err);
- Console.remove(function () {
- Game.remove(function () {
- mongoose.disconnect();
- })
- })
- }
|