Maison  >  Article  >  développement back-end  >  Exemple complet d'explication de la classe d'opérations de base de données mongoDB implémentée en PHP

Exemple complet d'explication de la classe d'opérations de base de données mongoDB implémentée en PHP

jacklove
jackloveoriginal
2018-06-27 17:55:431645parcourir

Cet article présente principalement la classe d'opérations de base de données mongoDB implémentée par PHP. Il combine le formulaire d'exemple complet avec une analyse détaillée des techniques d'implémentation de PHP pour la connexion, l'ajout, la suppression, la modification, les statistiques et d'autres opérations basées sur le mode singleton. .Les amis dans le besoin peuvent s'y référer. Suivant

L'exemple de cet article décrit la classe d'opération de base de données mongoDB implémentée par PHP. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

La base de données utilisée dans le développement récent du projet est la base de données mongodb. Parce que la société de l'éditeur vient d'utiliser la base de données mongodb, il n'y a pas de base de données mongodb encapsulée. classe d'opération auparavant. Pour l'utiliser, j'ai donc encapsulé une classe d'opération de base de données mongodb dans le projet et l'ai partagée ici. J'espère que vous ne critiquerez pas les parties insatisfaisantes.

Comme nous le savons tous, mongodb est un représentant typique de la base de données NoSQL et est recherché par de nombreux développeurs. Il a été particulièrement populaire ces dernières années. La popularité de mongodb n'est pas sans raison. brève introduction à MongoDB.

MongoDB est un produit entre une base de données relationnelle et une base de données non relationnelle. C'est la base de données non relationnelle la plus riche en fonctionnalités et ressemble le plus à une base de données relationnelle. La structure de données qu'il prend en charge est très lâche et est un format bjson de type json, elle peut donc stocker des types de données plus complexes. La plus grande caractéristique de Mongo est que le langage de requête qu'il prend en charge est très puissant. Sa syntaxe est quelque peu similaire à un langage de requête orienté objet. Il peut presque implémenter la plupart des fonctions similaires aux requêtes à table unique dans les bases de données relationnelles, et il prend également en charge l'indexation. de données.

Il se caractérise par des performances élevées, un déploiement facile, une utilisation facile et un stockage de données très pratique. Les principales caractéristiques fonctionnelles sont :

Stockage orienté ensemble, facile à stocker des données de type objet.
Mode gratuit.
Prise en charge des requêtes dynamiques.
Prend en charge l'indexation complète, y compris les objets internes.
Requête d'assistance.
Prend en charge la réplication et la récupération après échec.
Utilisez un stockage de données binaires efficace, y compris les objets volumineux (tels que les vidéos, etc.).
Gérer automatiquement la fragmentation pour prendre en charge l'évolutivité au niveau du cloud computing
Prend en charge RUBY, PYTHON, JAVA, C++, PHP et d'autres langages.
Le format de stockage des fichiers est BSON (une extension de JSON)
Peut être consulté via le réseau

Ce qu'on appelle "Collection-Orented" signifie que les données sont regroupées et stockées dans la concentration des données est appelée une collection. Chaque collection possède un nom d'identification unique dans la base de données et peut contenir un nombre illimité de documents. Le concept de collection est similaire à celui d'une table dans une base de données relationnelle (SGBDR), sauf qu'il n'est pas nécessaire de définir un schéma.

Sans schéma signifie que pour les fichiers stockés dans la base de données mongodb, nous n'avons besoin de connaître aucune définition de structure. Si nécessaire, vous pouvez stocker des fichiers de structures différentes dans la même base de données.

Les documents stockés dans une collection sont stockés sous forme de paires clé-valeur. La clé est utilisée pour identifier de manière unique un document et est un type de chaîne, tandis que la valeur peut être n'importe quel type de fichier complexe. Nous appelons cette forme de stockage BSON (Binary Serialized dOcument Format).

Le serveur MongoDB peut fonctionner sur les plateformes Linux, Windows ou OS X, prend en charge les applications 32 bits et 64 bits et le port par défaut est 27017. Il est recommandé d'exécuter sur une plate-forme 64 bits car la taille de fichier maximale prise en charge par MongoDB

lors de l'exécution en mode 32 bits est de 2 Go.

MongoDB stocke les données dans des fichiers (chemin par défaut : /data/db) et utilise des fichiers mappés en mémoire pour la gestion afin d'améliorer l'efficacité.

Le code source de la classe d'opération de base de données de la base de données d'opération PHP MongoDB encapsulée par l'éditeur est le suivant, à titre de référence uniquement.

<?php
/**
 * PHP操作mongodb数据库操作类
 */
class Database {
  protected $database  = &#39;&#39;;
  protected $mo;
  /**
   * 构造方法
   */
  public function __construct() {
    $server = DBSERVER;
    $user = DBUSER;
    $password = DBPASS;
    $port = DBPORT;
    $database = DBNAME;
    $mongo = $this->getInstance($server, $user, $password, $port);
    $this->database = $mongo->$database;
  }
  /**
   * 数据库单例方法
   * @param $server
   * @param $user
   * @param $password
   * @param $port
   * @return Mongo
   */
  public function getInstance($server, $user, $password, $port) {
    if (isset($this->mo)) {
      return $this->mo;
    } else {
      if (!empty($server)) {
        if (!empty($port)) {
          if (!empty($user) && !empty($password)) {
            $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
          } else {
            $this->mo = new Mongo("mongodb://{$server}:{$port}");
          }
        } else {
          $this->mo = new Mongo("mongodb://{$server}");
        }
      } else {
        $this->mo = new Mongo();
      }
      return $this->mo;
    }
  }
  /**
   * 查询表中所有数据
   * @param $table
   * @param array $where
   * @param array $sort
   * @param string $limit
   * @param string $skip
   * @return array|int
   */
  public function getAll($table, $where = array(), $sort = array(), $limit = &#39;&#39;, $skip = &#39;&#39;) {
    if (!empty($where)) {
      $data = $this->database->$table->find($where);
    } else {
      $data = $this->database->$table->find();
    }
    if (!empty($sort)) {
      $data = $data->sort($sort);
    }
    if (!empty($limit)) {
      $data = $data->limit($limit);
    }
    if (!empty($skip)) {
      $data = $data->skip($skip);
    }
    $newData = array();
    while ($data->hasNext()) {
      $newData[] = $data->getNext();
    }
    if (count($newData) == 0) {
      return 0;
    }
    return $newData;
  }
  /**
   * 查询指定一条数据
   * @param $table
   * @param array $where
   * @return int
   */
  public function getOne($table, $where = array()) {
    if (!empty($where)) {
      $data = $this->database->$table->findOne($where);
    } else {
      $data = $this->database->$table->findOne();
    }
    return $data;
  }
  /**
   * 统计个数
   * @param $table
   * @param array $where
   * @return mixed
   */
  public function getCount($table, $where = array()) {
    if (!empty($where)) {
      $data = $this->database->$table->find($where)->count();
    } else {
      $data = $this->database->$table->find()->count();
    }
    return $data;
  }
  /**
   * 直接执行mongo命令
   * @param $sql
   * @return array
   */
  public function toExcute($sql) {
    $result = $this->database->execute($sql);
    return $result;
  }
  /**
   * 分组统计个数
   * @param $table
   * @param $where
   * @param $field
   */
  public function groupCount($table, $where, $field) {
    $cond = array(
      array(
        &#39;$match&#39; => $where,
      ),
      array(
        &#39;$group&#39; => array(
          &#39;_id&#39; => &#39;$&#39; . $field,
          &#39;count&#39; => array(&#39;$sum&#39; => 1),
        ),
      ),
      array(
        &#39;$sort&#39; => array("count" => -1),
      ),
    );
    $this->database->$table->aggregate($cond);
  }
  /**
   * 删除数据
   * @param $table
   * @param $where
   * @return array|bool
   */
  public function toDelete($table, $where) {
    $re = $this->database->$table->remove($where);
    return $re;
  }
  /**
   * 插入数据
   * @param $table
   * @param $data
   * @return array|bool
   */
  public function toInsert($table, $data) {
    $re = $this->database->$table->insert($data);
    return $re;
  }
  /**
   * 更新数据
   * @param $table
   * @param $where
   * @param $data
   * @return bool
   */
  public function toUpdate($table, $where, $data) {
    $re = $this->database->$table->update($where, array(&#39;$set&#39; => $data));
    return $re;
  }
  /**
   * 获取唯一数据
   * @param $table
   * @param $key
   * @return array
   */
  public function distinctData($table, $key, $query = array()) {
    if (!empty($query)) {
      $where = array(&#39;distinct&#39; => $table, &#39;key&#39; => $key, &#39;query&#39; => $query);
    } else {
      $where = array(&#39;distinct&#39; => $table, &#39;key&#39; => $key);
    }
    $data = $this->database->command($where);
    return $data[&#39;values&#39;];
  }
}
?>

Articles qui pourraient vous intéresser :

Le framework ThinkPHP utilise la redirection pour implémenter la page rechargement Exemples de méthodes directionnelles expliquées

php Plusieurs méthodes pour expliquer si une chaîne contient une chaîne spécifiée

php Framework CodeIgniter utilise la méthode redis pour expliquer

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn