目錄
您可能感興趣的文章:
首頁 後端開發 php教程 PHP實作的mongoDB資料庫操作類別完整實例講解

PHP實作的mongoDB資料庫操作類別完整實例講解

Jun 27, 2018 pm 05:55 PM
mongodb php 資料庫

這篇文章主要介紹了PHP實現的mongoDB資料庫操作類別,結合完整實例形式詳細分析了php基於單例模式針對mongoDB資料庫連接、增刪改查、統計等操作相關實現技巧,需要的朋友可以參考下

本文實例講述了PHP實作的mongoDB資料庫操作類別。分享給大家供大家參考,具體如下:

最近的專案開發中使用的資料庫是mongodb資料庫,因為小編的公司也是剛使用mongodb資料庫,所以之前沒有封裝好的mongodb資料庫操作類別拿來使用,所以小編在專案中自己封裝了一個mongodb資料庫操作類,特拿出來分享,不盡人意的地方希望大家勿噴。

眾所周知,mongodb是典型的nosql資料庫的代表,受到很多開發者的追捧,近年來尤為火熱,mongodb的流行不是沒有原因的,下邊給大家簡單介紹下MongoDB。

MongoDB是一個介於關聯式資料庫和非關聯式資料庫之間的產品,是非關聯式資料庫當中功能最豐富,最像關聯式資料庫的。他支援的資料結構非常鬆散,是類似json的bjson格式,因此可以儲存比較複雜的資料類型。 Mongo最大的特點是他支援的查詢語言非常強大,其語法有點類似於物件導向的查詢語言,幾乎可以實現類似關係型資料庫單表查詢的絕大部分功能,而且還支援對資料建立索引。

它的特點是高效能、易於部署、易於使用,儲存資料非常方便。主要功能特性有:

面向集合存儲,易儲存物件類型的資料。
模式自由。
支援動態查詢。
支援完全索引,包含內部物件。
支援查詢。
支援複製和故障復原。
使用高效的二進位資料存儲,包括大型物件(如視訊等)。
自動處理碎片,以支援雲端運算層次的擴展性
支援RUBY,PYTHON,JAVA,C ,PHP等多種語言。
檔案儲存格式為BSON(一種JSON的擴充)
可透過網路存取

#所謂「面向集合」(Collenction-Orented),意思是資料被分組儲存在數據集中,被稱為一個集合(Collenction)。每個 集合在資料庫中都有一個唯一的識別名,並且可以包含無限數目的文件。集合的概念類似關係型資料庫(RDBMS)裡的表(table),不同的是它不需要定 義任何模式(schema)。

模式自由(schema-free),意味著對於儲存在mongodb資料庫中的文件,我們不需要知道它的任何結構定義。如果需要的話,你完全可以把不同結構的檔案儲存在同一個資料庫裡。

儲存在集合中的文檔,被儲存為鍵-值對的形式。鍵用於唯一標識一個文檔,為字串類型,而值則可以是各中複雜的文件類型。我們稱這種儲存形式為BSON(Binary Serialized dOcument Format)。

MongoDB服務端可運作在Linux、Windows或OS X平台,支援32位元和64位元應用,預設連接埠為27017。建議運行在64位元平台,因為MongoDB

在32位元模式運行時支援的最大檔案尺寸為2GB。

MongoDB把資料儲存在檔案中(預設路徑為:/data/db),為提高效率使用記憶體映射檔進行管理。

小編自己封裝的PHP作業MongoDB資料庫的資料庫操作類別原始碼如下,僅供參考。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

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

  }

}

?>

登入後複製

您可能感興趣的文章:

ThinkPHP框架使用redirect實作頁面重定向的方法實例講解

php 字串中是否包含指定字串的多種方法講解

php框架CodeIgniter使用redis的方法來講解

以上是PHP實作的mongoDB資料庫操作類別完整實例講解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1670
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1276
29
C# 教程
1256
24
繼續使用PHP:耐力的原因 繼續使用PHP:耐力的原因 Apr 19, 2025 am 12:23 AM

PHP仍然流行的原因是其易用性、靈活性和強大的生態系統。 1)易用性和簡單語法使其成為初學者的首選。 2)與web開發緊密結合,處理HTTP請求和數據庫交互出色。 3)龐大的生態系統提供了豐富的工具和庫。 4)活躍的社區和開源性質使其適應新需求和技術趨勢。

甲骨文在商業世界中的作用 甲骨文在商業世界中的作用 Apr 23, 2025 am 12:01 AM

Oracle不僅是數據庫公司,還是雲計算和ERP系統的領導者。 1.Oracle提供從數據庫到雲服務和ERP系統的全面解決方案。 2.OracleCloud挑戰AWS和Azure,提供IaaS、PaaS和SaaS服務。 3.Oracle的ERP系統如E-BusinessSuite和FusionApplications幫助企業優化運營。

MongoDB vs. Oracle:為您的需求選擇正確的數據庫 MongoDB vs. Oracle:為您的需求選擇正確的數據庫 Apr 22, 2025 am 12:10 AM

MongoDB適合非結構化數據和高擴展性需求,Oracle適合需要嚴格數據一致性的場景。 1.MongoDB靈活存儲不同結構數據,適合社交媒體和物聯網。 2.Oracle結構化數據模型確保數據完整性,適用於金融交易。 3.MongoDB通過分片橫向擴展,Oracle通過RAC縱向擴展。 4.MongoDB維護成本低,Oracle維護成本高但支持完善。

IIS和PHP的兼容性:深度潛水 IIS和PHP的兼容性:深度潛水 Apr 22, 2025 am 12:01 AM

IIS和PHP可以兼容,通過FastCGI實現。 1.IIS通過配置文件將.php文件請求轉發給FastCGI模塊。 2.FastCGI模塊啟動PHP進程處理請求,提高性能和穩定性。 3.實際應用中需注意配置細節、錯誤調試和性能優化。

如果session_start()被多次調用會發生什麼? 如果session_start()被多次調用會發生什麼? Apr 25, 2025 am 12:06 AM

多次調用session_start()會導致警告信息和可能的數據覆蓋。 1)PHP會發出警告,提示session已啟動。 2)可能導致session數據意外覆蓋。 3)使用session_status()檢查session狀態,避免重複調用。

REDIS:了解其架構和目的 REDIS:了解其架構和目的 Apr 26, 2025 am 12:11 AM

Redis是一种内存数据结构存储系统,主要用作数据库、缓存和消息代理。它的核心特点包括单线程模型、I/O多路复用、持久化机制、复制与集群功能。Redis在实际应用中常用于缓存、会话存储和消息队列,通过选择合适的数据结构、使用管道和事务、以及进行监控和调优,可以显著提升其性能。

作曲家:通過AI的幫助開發PHP 作曲家:通過AI的幫助開發PHP Apr 29, 2025 am 12:27 AM

AI可以幫助優化Composer的使用,具體方法包括:1.依賴管理優化:AI分析依賴關係,建議最佳版本組合,減少衝突。 2.自動化代碼生成:AI生成符合最佳實踐的composer.json文件。 3.代碼質量提升:AI檢測潛在問題,提供優化建議,提高代碼質量。這些方法通過機器學習和自然語言處理技術實現,幫助開發者提高效率和代碼質量。

session_start()函數的意義是什麼? session_start()函數的意義是什麼? May 03, 2025 am 12:18 AM

session_start()iscucialinphpformanagingusersessions.1)ItInitiateSanewsessionifnoneexists,2)resumesanexistingsessions,and3)setsasesessionCookieforContinuityActinuityAccontinuityAcconActInityAcconActInityAcconAccRequests,EnablingApplicationsApplicationsLikeUseAppericationLikeUseAthenticationalticationaltication and PersersonalizedContentent。

See all articles