read_preference.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. "use strict";
  2. /**
  3. * @fileOverview The **ReadPreference** class is a class that represents a MongoDB ReadPreference and is
  4. * used to construct connections.
  5. *
  6. * @example
  7. * var Db = require('mongodb').Db,
  8. * ReplSet = require('mongodb').ReplSet,
  9. * Server = require('mongodb').Server,
  10. * ReadPreference = require('mongodb').ReadPreference,
  11. * test = require('assert');
  12. * // Connect using ReplSet
  13. * var server = new Server('localhost', 27017);
  14. * var db = new Db('test', new ReplSet([server]));
  15. * db.open(function(err, db) {
  16. * test.equal(null, err);
  17. * // Perform a read
  18. * var cursor = db.collection('t').find({});
  19. * cursor.setReadPreference(ReadPreference.PRIMARY);
  20. * cursor.toArray(function(err, docs) {
  21. * test.equal(null, err);
  22. * db.close();
  23. * });
  24. * });
  25. */
  26. /**
  27. * Creates a new ReadPreference instance
  28. *
  29. * Read Preferences
  30. * - **ReadPreference.PRIMARY**, Read from primary only. All operations produce an error (throw an exception where applicable) if primary is unavailable. Cannot be combined with tags (This is the default.).
  31. * - **ReadPreference.PRIMARY_PREFERRED**, Read from primary if available, otherwise a secondary.
  32. * - **ReadPreference.SECONDARY**, Read from secondary if available, otherwise error.
  33. * - **ReadPreference.SECONDARY_PREFERRED**, Read from a secondary if available, otherwise read from the primary.
  34. * - **ReadPreference.NEAREST**, All modes read from among the nearest candidates, but unlike other modes, NEAREST will include both the primary and all secondaries in the random selection.
  35. *
  36. * @class
  37. * @param {string} mode The ReadPreference mode as listed above.
  38. * @param {object} tags An object representing read preference tags.
  39. * @property {string} mode The ReadPreference mode.
  40. * @property {object} tags The ReadPreference tags.
  41. * @return {ReadPreference} a ReadPreference instance.
  42. */
  43. var ReadPreference = function(mode, tags) {
  44. if(!(this instanceof ReadPreference))
  45. return new ReadPreference(mode, tags);
  46. this._type = 'ReadPreference';
  47. this.mode = mode;
  48. this.tags = tags;
  49. }
  50. /**
  51. * Validate if a mode is legal
  52. *
  53. * @method
  54. * @param {string} mode The string representing the read preference mode.
  55. * @return {boolean}
  56. */
  57. ReadPreference.isValid = function(_mode) {
  58. return (_mode == ReadPreference.PRIMARY || _mode == ReadPreference.PRIMARY_PREFERRED
  59. || _mode == ReadPreference.SECONDARY || _mode == ReadPreference.SECONDARY_PREFERRED
  60. || _mode == ReadPreference.NEAREST
  61. || _mode == true || _mode == false || _mode == null);
  62. }
  63. /**
  64. * Validate if a mode is legal
  65. *
  66. * @method
  67. * @param {string} mode The string representing the read preference mode.
  68. * @return {boolean}
  69. */
  70. ReadPreference.prototype.isValid = function(mode) {
  71. var _mode = typeof mode == 'string' ? mode : this.mode;
  72. return ReadPreference.isValid(_mode);
  73. }
  74. /**
  75. * @ignore
  76. */
  77. ReadPreference.prototype.toObject = function() {
  78. var object = {mode:this.mode};
  79. if(this.tags != null) {
  80. object['tags'] = this.tags;
  81. }
  82. return object;
  83. }
  84. /**
  85. * @ignore
  86. */
  87. ReadPreference.PRIMARY = 'primary';
  88. ReadPreference.PRIMARY_PREFERRED = 'primaryPreferred';
  89. ReadPreference.SECONDARY = 'secondary';
  90. ReadPreference.SECONDARY_PREFERRED = 'secondaryPreferred';
  91. ReadPreference.NEAREST = 'nearest'
  92. /**
  93. * @ignore
  94. */
  95. module.exports = ReadPreference;