Doctrine\ODM\MongoDB\Mapping\ClassMetadataInfo::setShardKey PHP Method

setShardKey() public method

Set shard key for this Document.
public setShardKey ( array $keys, array $options = [] )
$keys array Array of document keys.
$options array Array of sharding options.
    public function setShardKey(array $keys, array $options = array())
    {
        if ($this->inheritanceType === self::INHERITANCE_TYPE_SINGLE_COLLECTION && !is_null($this->shardKey)) {
            throw MappingException::shardKeyInSingleCollInheritanceSubclass($this->getName());
        }
        if ($this->isEmbeddedDocument) {
            throw MappingException::embeddedDocumentCantHaveShardKey($this->getName());
        }
        foreach (array_keys($keys) as $field) {
            if (!isset($this->fieldMappings[$field])) {
                continue;
            }
            if (in_array($this->fieldMappings[$field]['type'], ['many', 'collection'])) {
                throw MappingException::noMultiKeyShardKeys($this->getName(), $field);
            }
            if ($this->fieldMappings[$field]['strategy'] !== static::STORAGE_STRATEGY_SET) {
                throw MappingException::onlySetStrategyAllowedInShardKey($this->getName(), $field);
            }
        }
        $this->shardKey = array('keys' => array_map(function ($value) {
            if ($value == 1 || $value == -1) {
                return (int) $value;
            }
            if (is_string($value)) {
                $lower = strtolower($value);
                if ($lower === 'asc') {
                    return 1;
                } elseif ($lower === 'desc') {
                    return -1;
                }
            }
            return $value;
        }, $keys), 'options' => $options);
    }

Usage Example

 /**
  * @param ClassMetadataInfo $class
  * @param ODM\ShardKey      $shardKey
  *
  * @throws MappingException
  */
 private function setShardKey(ClassMetadataInfo $class, ODM\ShardKey $shardKey)
 {
     $options = array();
     $allowed = array('unique', 'numInitialChunks');
     foreach ($allowed as $name) {
         if (isset($shardKey->{$name})) {
             $options[$name] = $shardKey->{$name};
         }
     }
     $class->setShardKey($shardKey->keys, $options);
 }
All Usage Examples Of Doctrine\ODM\MongoDB\Mapping\ClassMetadataInfo::setShardKey
ClassMetadataInfo