mongoose.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. var h = require('../helper');
  2. var async = require('async');
  3. var Mongoose = require('mongoose');
  4. var connection = Mongoose.connect('mongodb://127.0.0.1/hello_world')
  5. // Mongoose Setup
  6. var WorldSchema = new Mongoose.Schema({
  7. id : Number,
  8. randomNumber: Number
  9. }, {
  10. collection: 'world'
  11. });
  12. var FortuneSchema = new Mongoose.Schema({
  13. id: Number,
  14. message: String
  15. }, {
  16. collection: 'fortune'
  17. });
  18. var Worlds = connection.model('World', WorldSchema);
  19. var Fortunes = connection.model('Fortune', FortuneSchema);
  20. function mongooseRandomWorld(callback) {
  21. Worlds.findOne({
  22. id: h.randomTfbNumber()
  23. }).exec(callback);
  24. }
  25. function mongooseGetAllFortunes(callback) {
  26. Fortunes.find({})
  27. .exec(callback);
  28. }
  29. module.exports = {
  30. SingleQuery: function (req, res) {
  31. mongooseRandomWorld(function (err, result) {
  32. if (err) { return process.exit(1); }
  33. h.addTfbHeaders(res, 'json');
  34. res.end(JSON.stringify(result));
  35. })
  36. },
  37. MultipleQueries: function (queries, req, res) {
  38. var queryFunctions = h.fillArray(mongooseRandomWorld, queries)
  39. async.parallel(queryFunctions, function (err, results) {
  40. if (err) { return process.exit(1); }
  41. h.addTfbHeaders(res, 'json');
  42. res.end(JSON.stringify(results));
  43. });
  44. },
  45. Fortunes: function (req, res) {
  46. mongooseGetAllFortunes(function (err, fortunes) {
  47. if (err) { return process.exit(1); }
  48. fortunes.push(h.ADDITIONAL_FORTUNE);
  49. fortunes.sort(function (a, b) {
  50. return a.message.localeCompare(b.message);
  51. });
  52. h.addTfbHeaders(res, 'html');
  53. res.end(h.fortunesTemplate({
  54. fortunes: fortunes
  55. }))
  56. });
  57. },
  58. Updates: function (queries, req, res) {
  59. var selectFunctions = h.fillArray(mongooseRandomWorld, queries);
  60. async.parallel(selectFunctions, function (err, worlds) {
  61. if (err) { return process.exit(1); }
  62. var updateFunctions = [];
  63. for (var i = 0; i < queries; i++) {
  64. (function (i) {
  65. updateFunctions.push(function (callback) {
  66. worlds[i].randomNumber = h.randomTfbNumber();
  67. Worlds.update({
  68. id: worlds[i].id
  69. }, {
  70. randomNumber: worlds[i].randomNumber
  71. }, callback);
  72. });
  73. })(i);
  74. }
  75. async.parallel(updateFunctions, function (err, results) {
  76. if (err) { return process.exit(1); }
  77. h.addTfbHeaders(res, 'json');
  78. // results does not have updated document information
  79. // if no err: all updates were successful
  80. res.end(JSON.stringify(worlds));
  81. });
  82. });
  83. }
  84. };