/**
  * - Retrouver un refElement selon certains critères et le modifier/supprimer
  * - Récupérer cet refElement ou sa version modifiée
  * - Gestion des exceptions et des erreurs
  * @author Alban Truc
  * @param array|RefElement $searchQuery critères de recherche
  * @param array|RefElement $updateCriteria les modifications à réaliser
  * @param array|NULL $fieldsToReturn pour ne récupérer que certains champs
  * @param array|NULL $options
  * @since 11/03/2014
  * @return array|RefElement
  */
 function findAndModify($searchQuery, $updateCriteria, $fieldsToReturn = NULL, $options = NULL)
 {
     //Transforme $criteria en array s'il contient un objet
     if ($searchQuery instanceof RefElement) {
         $searchQuery = $this->dismount($searchQuery);
     }
     //Transforme $criteria en array s'il contient un objet
     if ($updateCriteria instanceof RefElement) {
         $updateCriteria = $this->dismount($updateCriteria);
     }
     $result = parent::__findAndModify('refelement', $searchQuery, $updateCriteria, $fieldsToReturn, $options);
     if ($fieldsToReturn === NULL) {
         $result = new RefElement($result);
     }
     return $result;
 }
 /**
  * - Retrouver une connexion selon certains critères et le modifier/supprimer
  * - Récupérer cette connexion ou sa version modifiée
  * - Gestion des exceptions et des erreurs
  * @author Alban Truc
  * @param array|Connection $searchQuery critères de recherche
  * @param array|Connection $updateCriteria les modifications à réaliser
  * @param array|NULL $fieldsToReturn pour ne récupérer que certains champs
  * @param array|NULL $options
  * @since 11/03/2014
  * @return array|Connection
  */
 function findAndModify($searchQuery, $updateCriteria, $fieldsToReturn = NULL, $options = NULL)
 {
     //Transforme $criteria en array s'il contient un objet
     if ($searchQuery instanceof Connection) {
         $searchQuery = $this->dismount($searchQuery);
     }
     //Transforme $criteria en array s'il contient un objet
     if ($updateCriteria instanceof Connection) {
         $updateCriteria = $this->dismount($updateCriteria);
     }
     if (isset($searchQuery['idUser'])) {
         if ($searchQuery['idUser'] instanceof User) {
             $searchQuery['idUser'] = new MongoId($searchQuery['idUser']->getId());
         } else {
             if (is_array($searchQuery['idUser']) && isset($searchQuery['idUser']['_id'])) {
                 $searchQuery['idUser'] = $searchQuery['idUser']['_id'];
             }
         }
     }
     if (isset($updateCriteria['idUser'])) {
         if ($updateCriteria['idUser'] instanceof User) {
             $updateCriteria['idUser'] = new MongoId($updateCriteria['idUser']->getId());
         } else {
             if (is_array($updateCriteria['idUser']) && isset($updateCriteria['idUser']['_id'])) {
                 $updateCriteria['idUser'] = $updateCriteria['idUser']['_id'];
             }
         }
     }
     $result = parent::__findAndModify('connection', $searchQuery, $updateCriteria, $fieldsToReturn, $options);
     if ($fieldsToReturn === NULL) {
         $result = new Connection($result);
     }
     return $result;
 }