@@ -95,9 +95,16 @@ public function __toString()
9595 */
9696 public function aggregate (array $ pipeline , array $ options = array ())
9797 {
98- $ readPreference = new ReadPreference (ReadPreference::RP_PRIMARY );
99- $ server = $ this ->manager ->selectServer ($ readPreference );
98+ if ( ! isset ($ options ['readPreference ' ])) {
99+ $ options ['readPreference ' ] = $ this ->readPreference ;
100+ }
101+
102+ if (\MongoDB \is_last_pipeline_operator_out ($ pipeline )) {
103+ $ options ['readPreference ' ] = new ReadPreference (ReadPreference::RP_PRIMARY );
104+ }
105+
100106 $ operation = new Aggregate ($ this ->databaseName , $ this ->collectionName , $ pipeline , $ options );
107+ $ server = $ this ->manager ->selectServer ($ options ['readPreference ' ]);
101108
102109 return $ operation ->execute ($ server );
103110 }
@@ -132,8 +139,12 @@ public function bulkWrite(array $operations, array $options = array())
132139 */
133140 public function count ($ filter = array (), array $ options = array ())
134141 {
142+ if ( ! isset ($ options ['readPreference ' ])) {
143+ $ options ['readPreference ' ] = $ this ->readPreference ;
144+ }
145+
135146 $ operation = new Count ($ this ->databaseName , $ this ->collectionName , $ filter , $ options );
136- $ server = $ this ->manager ->selectServer (new ReadPreference (ReadPreference:: RP_PRIMARY ) );
147+ $ server = $ this ->manager ->selectServer ($ options [ ' readPreference ' ] );
137148
138149 return $ operation ->execute ($ server );
139150 }
@@ -236,8 +247,12 @@ public function deleteOne($filter, array $options = array())
236247 */
237248 public function distinct ($ fieldName , $ filter = array (), array $ options = array ())
238249 {
250+ if ( ! isset ($ options ['readPreference ' ])) {
251+ $ options ['readPreference ' ] = $ this ->readPreference ;
252+ }
253+
239254 $ operation = new Distinct ($ this ->databaseName , $ this ->collectionName , $ fieldName , $ filter , $ options );
240- $ server = $ this ->manager ->selectServer (new ReadPreference (ReadPreference:: RP_PRIMARY ) );
255+ $ server = $ this ->manager ->selectServer ($ options [ ' readPreference ' ] );
241256
242257 return $ operation ->execute ($ server );
243258 }
@@ -300,8 +315,12 @@ public function dropIndexes()
300315 */
301316 public function find ($ filter = array (), array $ options = array ())
302317 {
318+ if ( ! isset ($ options ['readPreference ' ])) {
319+ $ options ['readPreference ' ] = $ this ->readPreference ;
320+ }
321+
303322 $ operation = new Find ($ this ->databaseName , $ this ->collectionName , $ filter , $ options );
304- $ server = $ this ->manager ->selectServer (new ReadPreference (ReadPreference:: RP_PRIMARY ) );
323+ $ server = $ this ->manager ->selectServer ($ options [ ' readPreference ' ] );
305324
306325 return $ operation ->execute ($ server );
307326 }
@@ -317,8 +336,12 @@ public function find($filter = array(), array $options = array())
317336 */
318337 public function findOne ($ filter = array (), array $ options = array ())
319338 {
339+ if ( ! isset ($ options ['readPreference ' ])) {
340+ $ options ['readPreference ' ] = $ this ->readPreference ;
341+ }
342+
320343 $ operation = new FindOne ($ this ->databaseName , $ this ->collectionName , $ filter , $ options );
321- $ server = $ this ->manager ->selectServer (new ReadPreference (ReadPreference:: RP_PRIMARY ) );
344+ $ server = $ this ->manager ->selectServer ($ options [ ' readPreference ' ] );
322345
323346 return $ operation ->execute ($ server );
324347 }
0 commit comments