/** * Store document to pool * * @param array $document * @return \Sokil\Mongo\Collection */ public function addDocumentToDocumentPool(Document $document) { $documentId = (string) $document->getId(); if (!isset($this->documentPool[$documentId])) { $this->documentPool[$documentId] = $document; } else { // merging because document after // load and before getting in second place may be changed // and this changes must be preserved: // // 1. Document loads and modifies in current session // 2. Document loads modified in another session // 3. Document loads once again in current session. Changes from stage 2 merges as unmodified $this->documentPool[$documentId]->mergeUnmodified($document->toArray()); } return $this; }