arnaucube
arnaucube/thoughtsPublic Self-hosted repository
thoughts/node_modules/mongoose/examples/population-options.js
node_modules/mongoose/examples/population-options.jsRaw
  1
  2var mongoose = require('mongoose')
  3var Schema = mongoose.Schema;
  4
  5console.log('Running mongoose version %s', mongoose.version);
  6
  7/**
  8 * Console schema
  9 */
 10
 11var consoleSchema = Schema({
 12    name: String
 13  , manufacturer: String
 14  , released: Date
 15})
 16var Console = mongoose.model('Console', consoleSchema);
 17
 18/**
 19 * Game schema
 20 */
 21
 22var gameSchema = Schema({
 23    name: String
 24  , developer: String
 25  , released: Date
 26  , consoles: [{ type: Schema.Types.ObjectId, ref: 'Console' }]
 27})
 28var Game = mongoose.model('Game', gameSchema);
 29
 30/**
 31 * Connect to the console database on localhost with
 32 * the default port (27017)
 33 */
 34
 35mongoose.connect('mongodb://localhost/console', function (err) {
 36  // if we failed to connect, abort
 37  if (err) throw err;
 38
 39  // we connected ok
 40  createData();
 41})
 42
 43/**
 44 * Data generation
 45 */
 46
 47function createData () {
 48  Console.create({
 49      name: 'Nintendo 64'
 50    , manufacturer: 'Nintendo'
 51    , released: 'September 29, 1996'
 52  }, {
 53      name: 'Super Nintendo'
 54    , manufacturer: 'Nintendo'
 55    , released: 'August 23, 1991'
 56  }, {
 57      name: 'XBOX 360'
 58    , manufacturer: 'Microsoft'
 59    , released: 'November 22, 2005'
 60  }, function (err, nintendo64, superNintendo, xbox360) {
 61    if (err) return done(err);
 62
 63    Game.create({
 64        name: 'Legend of Zelda: Ocarina of Time'
 65      , developer: 'Nintendo'
 66      , released: new Date('November 21, 1998')
 67      , consoles: [nintendo64]
 68    }, {
 69        name: 'Mario Kart'
 70      , developer: 'Nintendo'
 71      , released: 'September 1, 1992'
 72      , consoles: [superNintendo]
 73    }, {
 74        name: 'Perfect Dark Zero'
 75      , developer: 'Rare'
 76      , released: 'November 17, 2005'
 77      , consoles: [xbox360]
 78    }, function (err) {
 79      if (err) return done(err);
 80      example();
 81    })
 82  })
 83}
 84
 85/**
 86 * Population
 87 */
 88
 89function example () {
 90  Game
 91  .find({})
 92  .populate({
 93      path: 'consoles'
 94    , match: { manufacturer: 'Nintendo' }
 95    , select: 'name'
 96    , options: { comment: 'population' }
 97  })
 98  .exec(function (err, games) {
 99    if (err) return done(err);
100
101    games.forEach(function (game) {
102      console.log(
103          '"%s" was released for the %s on %s'
104        , game.name
105        , game.consoles.length ? game.consoles[0].name : '??'
106        , game.released.toLocaleDateString());
107    })
108
109    return done();
110  })
111}
112
113/**
114 * Clean up
115 */
116
117function done (err) {
118  if (err) console.error(err);
119  Console.remove(function () {
120    Game.remove(function () {
121      mongoose.disconnect();
122    })
123  })
124}