3737
3838class Collection
3939{
40+ private static $ wireVersionForFindAndModifyWriteConcern = 4 ;
41+
4042 private $ collectionName ;
4143 private $ databaseName ;
4244 private $ manager ;
@@ -394,9 +396,14 @@ public function findOne($filter = [], array $options = [])
394396 */
395397 public function findOneAndDelete ($ filter , array $ options = [])
396398 {
397- $ operation = new FindOneAndDelete ($ this ->databaseName , $ this ->collectionName , $ filter , $ options );
398399 $ server = $ this ->manager ->selectServer (new ReadPreference (ReadPreference::RP_PRIMARY ));
399400
401+ if ( ! isset ($ options ['writeConcern ' ]) && \MongoDB \server_supports_feature ($ server , self ::$ wireVersionForFindAndModifyWriteConcern )) {
402+ $ options ['writeConcern ' ] = $ this ->writeConcern ;
403+ }
404+
405+ $ operation = new FindOneAndDelete ($ this ->databaseName , $ this ->collectionName , $ filter , $ options );
406+
400407 return $ operation ->execute ($ server );
401408 }
402409
@@ -417,9 +424,14 @@ public function findOneAndDelete($filter, array $options = [])
417424 */
418425 public function findOneAndReplace ($ filter , $ replacement , array $ options = [])
419426 {
420- $ operation = new FindOneAndReplace ($ this ->databaseName , $ this ->collectionName , $ filter , $ replacement , $ options );
421427 $ server = $ this ->manager ->selectServer (new ReadPreference (ReadPreference::RP_PRIMARY ));
422428
429+ if ( ! isset ($ options ['writeConcern ' ]) && \MongoDB \server_supports_feature ($ server , self ::$ wireVersionForFindAndModifyWriteConcern )) {
430+ $ options ['writeConcern ' ] = $ this ->writeConcern ;
431+ }
432+
433+ $ operation = new FindOneAndReplace ($ this ->databaseName , $ this ->collectionName , $ filter , $ replacement , $ options );
434+
423435 return $ operation ->execute ($ server );
424436 }
425437
@@ -440,9 +452,14 @@ public function findOneAndReplace($filter, $replacement, array $options = [])
440452 */
441453 public function findOneAndUpdate ($ filter , $ update , array $ options = [])
442454 {
443- $ operation = new FindOneAndUpdate ($ this ->databaseName , $ this ->collectionName , $ filter , $ update , $ options );
444455 $ server = $ this ->manager ->selectServer (new ReadPreference (ReadPreference::RP_PRIMARY ));
445456
457+ if ( ! isset ($ options ['writeConcern ' ]) && \MongoDB \server_supports_feature ($ server , self ::$ wireVersionForFindAndModifyWriteConcern )) {
458+ $ options ['writeConcern ' ] = $ this ->writeConcern ;
459+ }
460+
461+ $ operation = new FindOneAndUpdate ($ this ->databaseName , $ this ->collectionName , $ filter , $ update , $ options );
462+
446463 return $ operation ->execute ($ server );
447464 }
448465
0 commit comments