3 var needSlaveOk = ['primaryPreferred', 'secondary', 'secondaryPreferred', 'nearest'];
6 * @fileOverview The **ReadPreference** class is a class that represents a MongoDB ReadPreference and is
7 * used to construct connections.
10 * var ReplSet = require('mongodb-core').ReplSet
11 * , ReadPreference = require('mongodb-core').ReadPreference
12 * , assert = require('assert');
14 * var server = new ReplSet([{host: 'localhost', port: 30000}], {setName: 'rs'});
15 * // Wait for the connection event
16 * server.on('connect', function(server) {
17 * var cursor = server.cursor('db.test'
18 * , {find: 'db.test', query: {}}
19 * , {readPreference: new ReadPreference('secondary')});
20 * cursor.next(function(err, doc) {
30 * Creates a new Pool instance
32 * @param {string} preference A string describing the preference (primary|primaryPreferred|secondary|secondaryPreferred|nearest)
33 * @param {array} tags The tags object
34 * @param {object} [options] Additional read preference options
35 * @param {number} [options.maxStalenessMS] Max Secondary Read Stalleness in Miliseconds
36 * @property {string} preference The preference string (primary|primaryPreferred|secondary|secondaryPreferred|nearest)
37 * @property {array} tags The tags object
38 * @property {object} options Additional read preference options
39 * @property {number} maxStalenessMS MaxStalenessMS value for the read preference
40 * @return {ReadPreference}
42 var ReadPreference = function(preference, tags, options) {
43 this.preference = preference;
45 this.options = options;
47 // If no tags were passed in
48 if(tags && typeof tags == 'object') {
49 this.options = tags, tags = null;
52 // Add the maxStalenessMS value to the read Preference
53 if(this.options && this.options.maxStalenessMS) {
54 this.maxStalenessMS = this.options.maxStalenessMS;
59 * This needs slaveOk bit set
63 ReadPreference.prototype.slaveOk = function() {
64 return needSlaveOk.indexOf(this.preference) != -1;
68 * Are the two read preference equal
72 ReadPreference.prototype.equals = function(readPreference) {
73 return readPreference.preference == this.preference;
77 * Return JSON representation
81 ReadPreference.prototype.toJSON = function() {
82 var readPreference = {mode: this.preference};
83 if(Array.isArray(this.tags)) readPreference.tags = this.tags;
84 if(this.maxStalenessMS) readPreference.maxStalenessMS = this.maxStalenessMS;
85 return readPreference;
89 * Primary read preference
91 * @return {ReadPreference}
93 ReadPreference.primary = new ReadPreference('primary');
95 * Primary Preferred read preference
97 * @return {ReadPreference}
99 ReadPreference.primaryPreferred = new ReadPreference('primaryPreferred');
101 * Secondary read preference
103 * @return {ReadPreference}
105 ReadPreference.secondary = new ReadPreference('secondary');
107 * Secondary Preferred read preference
109 * @return {ReadPreference}
111 ReadPreference.secondaryPreferred = new ReadPreference('secondaryPreferred');
113 * Nearest read preference
115 * @return {ReadPreference}
117 ReadPreference.nearest = new ReadPreference('nearest');
119 module.exports = ReadPreference;