>  기사  >  백엔드 개발  >  PHP+mongoDB 데이터베이스 작업 단계에 대한 자세한 설명

PHP+mongoDB 데이터베이스 작업 단계에 대한 자세한 설명

php中世界最好的语言
php中世界最好的语言원래의
2018-05-16 16:31:191902검색

이번에는 PHP+mongoDB데이터베이스 운영에 대한 자세한 설명과 PHP+mongoDB 데이터베이스의 주의사항에 대해 소개하겠습니다.

최근 프로젝트 개발에 사용하는 데이터베이스는 mongodb 데이터베이스입니다. 저희 회사에서는 방금 mongodb 데이터베이스를 사용했기 때문에 이전에 사용할 수 있는 캡슐화된 mongodb 데이터베이스 작업 클래스가 없어서 프로젝트에서 mongodb를 특별히 공유했습니다. 여기서는 만족스럽지 못한 부분을 비판하지 않으셨으면 좋겠습니다.

우리 모두 알고 있듯이 mongodb는 NoSQL 데이터베이스의 대표적인 대표자로, 최근 몇 년 동안 특히 인기가 높았습니다. MongoDB에 대해 간단히 소개하겠습니다. .

MongoDB는 관계형 데이터베이스와 비관계형 데이터베이스 사이의 제품으로, 비관계형 데이터베이스 중에서 가장 기능이 풍부하고 관계형 데이터베이스와 가장 유사합니다. 지원하는 데이터 구조는 매우 느슨하고 json과 유사한 bjson 형식이므로 더 복잡한 데이터 유형을 저장할 수 있습니다. Mongo의 가장 큰 특징은 지원하는 쿼리 언어가 매우 강력하다는 것입니다. 구문은 객체 지향 쿼리 언어와 다소 유사하며 관계형 데이터베이스의 단일 테이블 쿼리와 유사한 대부분의 기능을 구현할 수 있습니다. 데이터 인덱싱.

고성능, 손쉬운 배포, 손쉬운 사용, 데이터 저장이 매우 편리한 것이 특징입니다. 주요 기능 특징은 다음과 같습니다.

컬렉션 저장을 지향하며 객체 유형 데이터를 쉽게 저장할 수 있습니다. 무료 모드.
동적 쿼리를 지원합니다.
내부 개체를 포함한 전체 인덱싱을 지원합니다.
지원문의.
복제 및 오류 복구를 지원합니다.
대형 개체(비디오 등)를 포함한 효율적인 바이너리 데이터 저장소를 사용하세요.
조각화를 자동으로 처리하여 클라우드 컴퓨팅 수준 확장성을 지원합니다.
RUBY, PYTHON, JAVA, C++, PHP 및 기타 언어를 지원합니다.
파일 저장 형식은 BSON(JSON의 확장)
네트워크를 통해 접근 가능

소위 "컬렉션 중심"이란 데이터를 그룹화하여 컬렉션( 컬렉션) . 각 컬렉션에는 데이터베이스에 고유한 식별 이름이 있으며 무제한의 문서를 포함할 수 있습니다. 컬렉션의 개념은 관계형 데이터베이스(RDBMS)의 테이블과 유사하지만 스키마를 정의할 필요가 없다는 차이점이 있습니다.

스키마가 없다는 것은 mongodb 데이터베이스에 저장된 파일의 경우 구조 정의를 알 필요가 없다는 것을 의미합니다. 필요한 경우 동일한 데이터베이스에 다른 구조의 파일을 저장할 수 있습니다.

컬렉션에 저장된 문서는 키-값 쌍으로 저장됩니다. 키는 문서를 고유하게 식별하는 데 사용되며 문자열 유형이지만 값은 복잡한 파일 유형일 수 있습니다. 우리는 이 저장 형식을 BSON(Binary Serialized dOcument Format)이라고 부릅니다.

MongoDB 서버는 Linux, Windows 또는 OS X 플랫폼에서 실행될 수 있고 32비트 및 64비트 애플리케이션을 지원하며 기본 포트는 27017입니다. MongoDB

에서 지원하는 최대 파일 크기는 32비트 모드 실행 시 2GB이므로 64비트 플랫폼에서 실행하는 것이 좋습니다.

MongoDB는 데이터를 파일(기본 경로: /data/db)에 저장하고, 메모리 매핑된 파일을 사용하여 관리하므로 효율성이 향상됩니다.

<?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;];
  }
}
?>

이 기사의 사례를 읽으신 후 방법을 마스터하셨다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!

추천 도서:

php WeChat 공개 계정은 현금 빨간 봉투 기능을 무작위로 배포합니다.


PHP 로드 밸런싱 하에서 세션 공유 사례에 대한 자세한 설명(코드 포함)

위 내용은 PHP+mongoDB 데이터베이스 작업 단계에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.