ba849dc38be6f1e47c376cc796b9a1a7ccfa6b4a
[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     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
80 function 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
99 function done(err) {
100   if (err) console.error(err);
101   Console.remove(function() {
102     Game.remove(function() {
103       mongoose.disconnect();
104     });
105   });
106 }