arnaucube
arnaucube/thoughtsPublic Self-hosted repository
thoughts/node_modules/mongoose/examples/population/population-plain-objects.js
node_modules/mongoose/examples/population/population-plain-objects.jsRaw
  1
  2var mongoose = require('../../lib');
  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: [{
 27    type: Schema.Types.ObjectId,
 28    ref: 'Console'
 29  }]
 30});
 31var Game = mongoose.model('Game', gameSchema);
 32
 33/**
 34 * Connect to the console database on localhost with
 35 * the default port (27017)
 36 */
 37
 38mongoose.connect('mongodb://localhost/console', function(err) {
 39  // if we failed to connect, abort
 40  if (err) throw err;
 41
 42  // we connected ok
 43  createData();
 44});
 45
 46/**
 47 * Data generation
 48 */
 49
 50function createData() {
 51  Console.create(
 52    {
 53      name: 'Nintendo 64',
 54      manufacturer: 'Nintendo',
 55      released: 'September 29, 1996'
 56    },
 57    function(err, nintendo64) {
 58      if (err) return done(err);
 59
 60      Game.create(
 61        {
 62          name: 'Legend of Zelda: Ocarina of Time',
 63          developer: 'Nintendo',
 64          released: new Date('November 21, 1998'),
 65          consoles: [nintendo64]
 66        },
 67        function(err) {
 68          if (err) return done(err);
 69          example();
 70        }
 71      );
 72    }
 73  );
 74}
 75
 76/**
 77 * Population
 78 */
 79
 80function example() {
 81  Game
 82  .findOne({name: /^Legend of Zelda/})
 83  .populate('consoles')
 84  .lean() // just return plain objects, not documents wrapped by mongoose
 85  .exec(function(err, ocinara) {
 86    if (err) return done(err);
 87
 88    console.log(
 89      '"%s" was released for the %s on %s',
 90      ocinara.name,
 91      ocinara.consoles[0].name,
 92      ocinara.released.toLocaleDateString()
 93    );
 94
 95    done();
 96  });
 97}
 98
 99function done(err) {
100  if (err) console.error(err);
101  Console.remove(function() {
102    Game.remove(function() {
103      mongoose.disconnect();
104    });
105  });
106}