readPreference === null) { $this->readPreference = new \MongoDB\Driver\ReadPreference(\MongoDB\Driver\ReadPreference::RP_PRIMARY); } $mode = $this->readPreference->getMode(); switch ($mode) { case \MongoDB\Driver\ReadPreference::RP_PRIMARY_PREFERRED: $type = \MongoClient::RP_PRIMARY_PREFERRED; break; case \MongoDB\Driver\ReadPreference::RP_SECONDARY: $type = \MongoClient::RP_SECONDARY; break; case \MongoDB\Driver\ReadPreference::RP_SECONDARY_PREFERRED: $type = \MongoClient::RP_SECONDARY_PREFERRED; break; case \MongoDB\Driver\ReadPreference::RP_NEAREST: $type = \MongoClient::RP_NEAREST; break; default: $type = \MongoClient::RP_PRIMARY; } $readPreference = ['type' => $type]; if ($this->readPreference->getTagSets() !== null && $this->readPreference->getTagSets() !== []) { $readPreference['tagsets'] = $this->readPreference->getTagSets(); } return $readPreference; } /** * @param string $readPreference * @param array $tags * @return bool */ protected function setReadPreferenceFromParameters($readPreference, $tags = null) { switch ($readPreference) { case \MongoClient::RP_PRIMARY: $mode = \MongoDB\Driver\ReadPreference::RP_PRIMARY; break; case \MongoClient::RP_PRIMARY_PREFERRED: $mode = \MongoDB\Driver\ReadPreference::RP_PRIMARY_PREFERRED; break; case \MongoClient::RP_SECONDARY: $mode = \MongoDB\Driver\ReadPreference::RP_SECONDARY; break; case \MongoClient::RP_SECONDARY_PREFERRED: $mode = \MongoDB\Driver\ReadPreference::RP_SECONDARY_PREFERRED; break; case \MongoClient::RP_NEAREST: $mode = \MongoDB\Driver\ReadPreference::RP_NEAREST; break; default: trigger_error("The value '$readPreference' is not valid as read preference type", E_WARNING); return false; } if ($readPreference == \MongoClient::RP_PRIMARY && count($tags)) { trigger_error("You can't use read preference tags with a read preference of PRIMARY", E_WARNING); return false; } $this->readPreference = new \MongoDB\Driver\ReadPreference($mode, $tags); return true; } /** * @param array $readPreferenceArray * @return bool */ protected function setReadPreferenceFromArray($readPreferenceArray) { $readPreference = $readPreferenceArray['type']; $tags = isset($readPreferenceArray['tagsets']) ? $readPreferenceArray['tagsets'] : []; return $this->setReadPreferenceFromParameters($readPreference, $tags); } }