61b4e85de6f2710c015f2e83902f9f5bedd5e1a3
[aai/esr-gui.git] /
1
2 var mongoose = require('../../lib');
3 var Schema = mongoose.Schema;
4
5 console.log('Running mongoose version %s', mongoose.version);
6
7 /**
8  * Console schema
9  */
10
11 var consoleSchema = Schema({
12   name: String,
13   manufacturer: String,
14   released: Date
15 });
16 var Console = mongoose.model('Console', consoleSchema);
17
18 /**
19  * Game schema
20  */
21
22 var gameSchema = Schema({
23   name: String,
24   developer: String,
25   released: Date,
26   consoles: [{
27     type: Schema.Types.ObjectId,
28     ref: 'Console'
29   }]
30 });
31 var Game = mongoose.model('Game', gameSchema);
32
33 /**
34  * Connect to the console database on localhost with
35  * the default port (27017)
36  */
37
38 mongoose.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
50 function createData() {
51   Console.create(
52     {
53       name: 'Nintendo 64',
54       manufacturer: 'Nintendo',
55       released: 'September 29, 1996'
56     },
57     {
58       name: 'Super Nintendo',
59       manufacturer: 'Nintendo',
60       released: 'August 23, 1991'
61     },
62     function(err, nintendo64, superNintendo) {
63       if (err) return done(err);
64
65       Game.create(
66         {
67           name: 'Legend of Zelda: Ocarina of Time',
68           developer: 'Nintendo',
69           released: new Date('November 21, 1998'),
70           consoles: [nintendo64]
71         },
72         {
73           name: 'Mario Kart',
74           developer: 'Nintendo',
75           released: 'September 1, 1992',
76           consoles: [superNintendo]
77         },
78         function(err) {
79           if (err) return done(err);
80           example();
81         }
82       );
83     }
84   );
85 }
86
87 /**
88  * Population
89  */
90
91 function example() {
92   Game
93   .find({})
94   .exec(function(err, games) {
95     if (err) return done(err);
96
97     console.log('found %d games', games.length);
98
99     var options = {path: 'consoles', select: 'name released -_id'};
100     Game.populate(games, options, function(err, games) {
101       if (err) return done(err);
102
103       games.forEach(function(game) {
104         console.log(
105           '"%s" was released for the %s on %s',
106           game.name,
107           game.consoles[0].name,
108           game.released.toLocaleDateString()
109         );
110       });
111
112       done();
113     });
114   });
115 }
116
117 function done(err) {
118   if (err) console.error(err);
119   Console.remove(function() {
120     Game.remove(function() {
121       mongoose.disconnect();
122     });
123   });
124 }