public function hydrate($data, $useDocumentPool = true)
{
if (!is_array($data) || !isset($data['_id'])) {
throw new Exception('Document must be stored and has _id key');
}
// if document already in pool - return it
if ($useDocumentPool && $this->isDocumentPoolEnabled() && $this->isDocumentInDocumentPool($data['_id'])) {
return $this->getDocumentFromDocumentPool($data['_id'])->mergeUnmodified($data);
}
// init document instance
$className = $this->getDocumentClassName($data);
$document = new $className($this, $data, array('stored' => true) + $this->definition->getOptions());
// store document in cache
if ($useDocumentPool && $this->isDocumentPoolEnabled()) {
$this->addDocumentToDocumentPool($document);
}
return $document;
}