mongodb建立集合、數據管理、PHP的mongodb擴展、21.32 PHP的mongo擴展

 mongodb建立集合、數據管理

建立集合

說明: 前面建立了test1用戶,test1用戶對db1庫讀寫,對db2只讀. 之因此先建立db1庫,表示用戶在db1庫中建立,就必定要db1庫驗證身份,即用戶的信息跟隨數據庫. 好比test1用戶雖然有db2庫的讀取權限,可是必定要先在db1庫進行身份驗證,直接訪問會提示驗證失敗.php

登陸:
[root@root-01 ~]#  mongo --host 192.168.2.115 --port 27017 -u admin -p "admin122" --authenticationDatabase "admin"
MongoDB shell version v3.4.9
connecting to: mongodb://192.168.2.115:27017/
MongoDB server version: 3.4.9
Server has startup warnings: 
2017-10-20T09:35:56.569+0800 I CONTROL  [initandlisten] 
2017-10-20T09:35:56.569+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2017-10-20T09:35:56.569+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2017-10-20T09:35:56.569+0800 I CONTROL  [initandlisten] 
2017-10-20T09:35:56.569+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2017-10-20T09:35:56.569+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2017-10-20T09:35:56.569+0800 I CONTROL  [initandlisten] 

進入db1庫:
> use db1
switched to db db1

對db1庫進行身份驗證:
> db.auth('test1','123aaa')
1

建立mycol集合:
> db.createCollection("mycol",{ capped:true,autoIndexID:true,size:6142800,max:10000})
{
	"ok" : 0,
	"errmsg" : "The field 'autoIndexID' is not a valid collection option. Options: { capped: true, autoIndexID: true, size: 6142800.0, max: 10000.0 }",
	"code" : 72,
	"codeName" : "InvalidOptions"
}

說明:建立集合失敗,顯示"ok" : 0, "errmsg"-->錯誤信息是'autoIndexID' 這個參數是不合適的.


把autoIndexID:true 這個參數去掉,從新建立:
> db.createCollection("mycol",{ capped:true,size:6142800,max:10000})
{ "ok" : 1 }



注:mycol-->是集合的名字
  capped true/ capped false (可選)--> 若是爲true,則啓用封頂集合,封頂集合是固定大小的集合,當它達到其最大大小,會自動覆蓋最先的條目; 若是爲true,則須要指定尺寸參數.
  autoindexID true或false (可選) --> 若是爲true,自動建立索引_id字段的默認值是false.
  size (可選) -->指定最大大小字節封頂集合,若是封頂是true,那麼還須要指定這個字段,單位B
  max (可選) --> 指定封頂集合容許在文件的最大數量.

 

數據管理

show tables 或show collections -->查看集合

> show tables
mycol

> show collections
mycol

db.Account.insert -->插入數據

說明: 當Account集合不存,在給Account集合插入數據時,會自動建立Account這個集合. html

給Account集合插入2條數據:
> db.Account.insert({AccountID:1,UserName:"ree",password:"123456"})
WriteResult({ "nInserted" : 1 })

> db.Account.insert({AccountID:2,UserName:"tina",password:"123456"})
WriteResult({ "nInserted" : 1 })

查看集合:
> show tables
Account
mycol



AccountID:1 -->表示第1條數據

db.Account.update-->更新數據

說明:指定集合Account,AccountID:1(第1條數據),新增長一個字段Age,值是20mysql

> db.Account.update({AccountID:1},{"$set":{"Age":20}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

 db.Account.find() -->查看全部文檔

> db.Account.find()
{ "_id" : ObjectId("59e960e740ba4b17e304ca91"), "AccountID" : 1, "UserName" : "ree", "password" : "123456", "Age" : 20 }
{ "_id" : ObjectId("59e9624d40ba4b17e304ca92"), "AccountID" : 2, "UserName" : "tina", "password" : "123456" }

db.Account.find({AccountID:1}) -->根據條件查看文檔

說明:能夠指定集合的IDgit

> db.Account.find({AccountID:1})
{ "_id" : ObjectId("59e960e740ba4b17e304ca91"), "AccountID" : 1, "UserName" : "ree", "password" : "123456", "Age" : 20 }

db.Account.remove({AccountID:1}) -->根據條件刪除集合的其中某個文檔 

刪除AccountID:1的數據:
> db.Account.remove({AccountID:1})
WriteResult({ "nRemoved" : 1 })

查看看集合全部文檔(只有一條數據):
> db.Account.find()
{ "_id" : ObjectId("59e9624d40ba4b17e304ca92"), "AccountID" : 2, "UserName" : "tina", "password" : "123456" }

db.Account.drop() -- 刪除全部文檔,即刪除集合

刪除集合:
> db.Account.drop()
true
> db.mycol.drop()
true


查看集合,就沒有集合了:
> show tables
建立col2集合:
> db.col2.insert({AccountID:1,UserName:"tina",password:"123456"})
WriteResult({ "nInserted" : 1 })

查看集合的狀態:
> db.printCollectionStats()
col2
{
	"ns" : "db1.col2",
	"size" : 81,
	"count" : 1,
	"avgObjSize" : 81,
	"storageSize" : 4096,
	"capped" : false,
	"wiredTiger" : {
		"metadata" : {
			"formatVersion" : 1
		},
..............................
..............................
後面信息太長,不做演示

 

PHP的mongodb擴展

說明: 在工做中頗有可能使用的是PHP的代碼,PHP去鏈接MongoDB, 要想PHP去鏈接MongoDB
        都須要安裝MongoDB的擴展.github

       在PHP的官網有個問題,有兩個擴展,一個是MongoDB.so,另外一個是Mongo.so,Mongo.so的話
       比較老的擴展,但仍有一個PHP程序寫的代碼有Mongo.so,因此這兩個擴展都須要瞭解.
     
如下是官方的解釋:

MongoDB.so :   
目前維護的驅動程序是PECL提供的mongodb擴展。這個驅動程序能夠獨立使用,雖然它是很是裸體的。您應該考慮使用帶有免費PHP庫的驅動程序,該可在裸機驅動程序之上實現更全功能的API。有關此架構的更多信息能夠在PHP.net文檔中找到。redis

Mongo.so:
mongo擴展是針對的PHP 5.x的舊版驅動程序。該mongo擴展再也不保持,新的項目建議使用mongodb擴展和PHP庫。社區開發的Mongo PHP適配器項目mongo使用新的mongodb擴展和PHP庫來實現舊 擴展的API ,這對於但願遷移現有應用程序的用戶來講多是有用的。sql


安裝MongoDB的擴展

[root@root-01 ~]# cd /usr/local/src

下載MongoDB源碼包:
[root@root-01 src]# wget https://pecl.php.net/get/mongodb-1.3.0.tgz

解壓:
[root@root-01 src]# tar -zxvf mongodb-1.3.0.tgz

進入MongoDB解壓後的目錄:
root@root-01 src]# cd mongodb-1.3.0

生成configure目錄:
[root@root-01 mongodb-1.3.0]# /usr/local/php-fpm/bin/phpize
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226


編譯:
[root@root-01 mongodb-1.3.0]# ./configure --with-php-config=/usr/local/php-fpm/bin/php-config

make:
[root@root-01 mongodb-1.3.0]# make && make install


編輯/usr/local/php-fpm/etc/php.ini

[root@root-01 ~]# vim /usr/local/php-fpm/etc/php.ini

找到合適的位置,增長:

extension=mongodb.sp

 
查看PHP擴展有沒有mongodb.so

[root@root-01 ~]# /usr/local/php-fpm/bin/php -m
[PHP Modules]
Core
ctype
curl
date
dom
ereg
fileinfo
filter
ftp
gd
hash
iconv
json
libxml
mbstring
memcache
mongodb
mysql
mysqli
openssl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
redis
Reflection
session
SimpleXML
soap
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zlib

[Zend Modules]

重啓php-fpm的服務 

[root@root-01 mongodb-1.3.0]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done


21.32 PHP的mongo擴展

[root@root-01 ~]# cd /usr/local/src

下載mongo擴展:
[root@root-01 src]# wget https://pecl.php.net/get/mongo-1.6.16.tgz

解壓:
[root@root-01 src]# tar -zxvf  mongo-1.6.16.tgz

進入解壓後的目錄:
[root@root-01 src]# cd mongo-1.6.16


生成configure目錄:
[root@root-01 mongo-1.6.16]# /usr/local/php-fpm/bin/phpize


編譯:
[root@root-01 mongo-1.6.16]# ./configure --with-php-config=/usr/local/php-fpm/bin/php-config


make:
[root@root-01 mongo-1.6.16]# make && make install

查看有沒有mongo.so:
[root@root-01 mongo-1.6.16]# ls /usr/local/php-fpm/lib/php/extensions/no-debug-non-zts-20131226/
memcache.so  mongodb.so  mongo.so  opcache.a  opcache.so  redis.so


編輯/usr/local/php-fpm/etc/php.ini

[root@root-01 ~]# vim /usr/local/php-fpm/etc/php.ini 

在適合的位置,增長:

extension=mongo.so


查看PHP擴展有沒有mongo.so

[root@root-01 ~]# /usr/local/php-fpm/bin/php -m
[PHP Modules]
Core
ctype
curl
date
dom
ereg
fileinfo
filter
ftp
gd
hash
iconv
json
libxml
mbstring
memcache
mongo
mongodb
mysql
mysqli
openssl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
redis
Reflection
session
SimpleXML
soap
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zlib

[Zend Modules]


重啓php-fpm的服務  

[root@root-01 mongodb-1.3.0]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done


測試Mongo擴展 

在默認虛擬主機建立mongo.php的測試文件

說明:測試php結合Mongo擴展有沒有問題, 若curl測試結果顯示集合建立成功說明沒有問題
      mongodb

[root@root-01 ~]# vim /data/www/default/mongo.php 

<?php
$m = new MongoClient(); //鏈接
$db = $m->test; //獲取名稱爲"test"的數據庫
$collection = $db->createCollection("runoob");
echo "集合建立成功";
?>

curl測試:
[root@root-01 default]# curl localhost/mongo.php
集合建立成功[root@root-01 default]#

編輯mongo啓動腳本

說明:把--auth去掉,不使用用戶驗證的方式登陸 shell

[root@root-01 ~]# vim /usr/lib/systemd/system/mongod.service 

Environment="OPTIONS=--auth -f /etc/mongod.conf"

更改成:
Environment="OPTIONS=-f /etc/mongod.conf"

重啓Mongo服務 

[root@root-01 ~]# systemctl restart mongod
Warning: mongod.service changed on disk. Run 'systemctl daemon-reload' to reload units.
[root@root-01 ~]# systemctl daemon-reload
[root@root-01 ~]# systemctl restart mongod


登陸Mongo查看是否有建立test數據庫以及runoob集合

登陸:
[root@root-01 ~]# mongo --host 192.168.2.115 --port 27017
MongoDB shell version v3.4.9
connecting to: mongodb://192.168.2.115:27017/
MongoDB server version: 3.4.9
Server has startup warnings: 
2017-10-20T13:07:45.345+0800 I CONTROL  [initandlisten] 
2017-10-20T13:07:45.345+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-10-20T13:07:45.345+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2017-10-20T13:07:45.345+0800 I CONTROL  [initandlisten] 
2017-10-20T13:07:45.345+0800 I CONTROL  [initandlisten] 
2017-10-20T13:07:45.345+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2017-10-20T13:07:45.345+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2017-10-20T13:07:45.345+0800 I CONTROL  [initandlisten] 
2017-10-20T13:07:45.345+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2017-10-20T13:07:45.345+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2017-10-20T13:07:45.345+0800 I CONTROL  [initandlisten] 

進入test庫:
> use test
switched to db test

查看集合:
> show tables
runoob

參考文檔:
https://docs.mongodb.com/ecosystem/drivers/php/
http://www.runoob.com/mongodb/mongodb-php.html
擴展內容:
mongodb安全設置 http://www.mongoing.com/archives/631
mongodb執行js腳本  http://www.jianshu.com/p/6bd8934bd1ca數據庫

相關文章
相關標籤/搜索