21.30 mongodb建立集合、數據管理(刪除查找等等)php
21.31 php的mongodb.so擴展 (兩種擴展的不一樣)html
21.32 php的mongo擴展linux
擴展內容nginx
mongodb安全設置 http://www.mongoing.com/archives/631git
mongodb執行js腳本 http://www.jianshu.com/p/6bd8934bd1ca程序員
21.30 mongodb建立集合、數據管理(刪除查找等)github
一:redis
MongoDB建立集合mongodb
1.db.createCollection("mycol",{ capped : true, size : 6142800, max :10000 }) //語法:db.createCollection(name,options)數據庫
name就是集合的名字(以上爲mycol),options可選(後面花括號部分),用來配置集合的參數,參數以下:
capped true/false (可選,是否封頂)若是爲true,則啓用封頂集合。封頂集合是固定大小的集合,當它達到其最大大小,會自動覆蓋最先的條目。若是指定true,則也須要指定尺寸參數。
autoindexID true/false (可選)若是爲true,自動建立索引_id字段的默認值是false。#這項實例中會有解釋
size (可選大小)指定最大大小字節封頂集合。若是封頂若是是 true,那麼你還須要指定這個字段。單位B #若是capped爲false,那麼這個size就沒意義了,由於不啓用封頂,也沒意義定義大小了
max (可選數量)指定封頂集合容許在文件的最大數量。
二:
MongoDB數據管理(刪除、查找等等)
1.show collections //查看集合,或者使用show tables
2.db.Account.insert({AccountID:1,UserName:"123",password:"123456"}) //在集合中插入一些數據。若是集合不存在,直接插入數據,則mongodb會自動建立集合
#由於咱們在建立集合的時候尚未定義具體的格式,因此在插入集合的時候就能夠定義具體的格式了
#Account指的是集合。由於Account自己不存在,若是集合不存在那麼他會自動的幫你建立這個集合,若是集合存在就在這個集合裏插入
AccountID:1是你collection(集合) 的名字
3.db.Account.update({AccountID:1},{"$set":{"Age":20}}) //更新(也就是修改)
#這條的意思是加一個新的數據,Age爲20。$set是動做
4.db.Account.find() //查看全部文檔
5.db.Account.find({AccountID:1}) //根據條件查詢
#查看AccountID爲1的
6.db.Account.remove({AccountID:1}) //根據條件刪除
7.db.Account.drop() //刪除全部文檔,即刪除集合
#這裏刪除的是Account這一行,就是mycol集合裏面的全部行所有刪掉,並非刪的mycol集合
db.mycol.drop() #爲刪除mycol集合
8.use dbname //先進入對應的庫
db.printCollectionStats() // 而後查看集合狀態
三:
MongoDB庫管理
1.db.version() //查看版本
2.use userdb //若是庫存在就切換,不存在就建立
3.show dbs //查看庫,此時userdb並無出現,這是由於該庫是空的,尚未任何集合,只須要建立一個集合就能看到了
4.db.createCollection('clo1') //建立集合clo1,在當前庫下面建立
5.db.dropDatabase() //刪除當前庫,要想刪除某個庫,必須切換到那個庫下
6.db.stats() //查看當前庫的信息
7.db.serverStatus() //查看mongodb服務器的狀態
實例:
一:
[root@axinlinux-01 ~]# mongo -utest1 -p123aaa --authenticationDatabase db1 #使用test1 進入
> use db1
switched to db db1
> db.createCollection("mycol", { capped : true, size :6142800, max : 10000 } )
{ "ok" : 1 }
#阿銘PPT中是這樣寫的db.createCollection("mycol",{ capped : true, autolndexID: true, size : 6142800, max :10000 }),這樣會報錯,由於加了autolndexID: true,刪除這項後是正確的,緣由不明!!!
二:
1.
> show tables #能夠用show tables來查看這個集合
mycol
> show collections #也能夠用這個
mycol
2.
> db.Account.insert({AccountID:1,UserName:"123",password:"123456"}) #插入這條數據。AccountID是Collection(集合)的名字。若是沒有這個集合(Account)就直接建立
WriteResult({ "nInserted" : 1 })
> show tables #查看一下
Account
mycol
> db.Account.insert({AccountID:2,UserName:"zhangsan",password:"abcde"}) #咱們在插入第二條數據。accountID爲2,名字時zhangsan,密碼是abcde
WriteResult({ "nInserted" : 1 })
3.
> db.Account.update({AccountID:1},{"$set":{"Age":20}}) #加一個新的值,Age爲20
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
4.
> db.Account.find()
{ "_id" : ObjectId("5bf02b5073583a853d57e5d1"), "AccountID" : 1, "UserName" : "123", "password" : "123456", "Age" : 20 }
{ "_id" : ObjectId("5bf02c4373583a853d57e5d2"), "AccountID" : 2, "UserName" : "zhangsan", "password" : "abcde" }
5.
> db.Account.find({AccountID:2})
{ "_id" : ObjectId("5bf02c4373583a853d57e5d2"), "AccountID" : 2, "UserName" : "zhangsan", "password" : "abcde" }
6.
> db.Account.remove({AccountID:1}) #刪除條件爲AccountID爲1的數據
WriteResult({ "nRemoved" : 1 })
> db.Account.find() #再來查看就沒有了
{ "_id" : ObjectId("5bf02c4373583a853d57e5d2"), "AccountID" : 2, "UserName" : "zhangsan", "password" : "abcde" }
7.
> db.Account.drop() #刪除mycol集合裏Account左右的行
true
> show tables #再來查看tables就沒有了
mycol
>
> db.mycol.drop() #刪除mycol集合
true
> show tables #再來查看就沒有了
> db.col2.insert({AccountID:1,UserName:"123",password:"123456"}) #先來建立一個叫col2的集合,
WriteResult({ "nInserted" : 1 })
8.
> db.printCollectionStats() #查看新建的col2集合的狀態
col2
{
"ns" : "db1.col2",
"size" : 80,
"count" : 1,
"avgObjSize" : 80,
"storageSize" : 16384,
"capped" : false,
"wiredTiger" : {
"metadata" : {
"formatVersion" : 1
},
。。。。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
21.31 php的mongodb擴展
!!mongodb.so與mongo.so的區別:
mongo.so擴展針對的是php的5.x版本,並且mongon.so也是一個比較老的擴展。之後就逐漸的不在使用了。而是使用mongodb.so的擴展。可是目前不少程序員寫的代碼裏面都是基於mongo.so擴展的。因此這兩種都要會
建議連個都裝,以防不時之需
PHP鏈接MongoDB-mongodb.so。共有兩種方案(一和二)
一:
實例中不作這一種方案,使用第二種
1.cd /usr/local/src/
2.git clone https://github.com/mongodb/mongo-php-driver
#用的是git clne,就是直接把mongo-php-driver(也就是mongodb的擴展)克隆下來
3.cd mongo-php-driver
4.git submodule update --init
#目的是使下面的phpize成功
5./usr/local/php/bin/phpize
6../configure --with-php-config=/usr/local/php-fpm/bin/php-config
#注意安裝路徑,這是針對php-fpm(nginx)的安裝路徑
7.make && make install
8.vi /usr/local/php/etc/php.ini //增長 extension = mongodb.so
9./usr/local/php/bin/php -m
二:
實例中爲這種方案
你們還能夠到pecl官網上下載mongodb的擴展源碼包
1.cd /usr/local/src/
2.wget https://pecl.php.net/get/mongodb-1.3.0.tgz
3.tar zxvf mongodb-1.3.0.tgz
4.cd mongodb-1.3.0
5./usr/local/php/bin/phpize
6. ./configure --with-php-config=/usr/local/php-fpm/bin/php-config
7.make && make install
8.vi /usr/local/php/etc/php.ini //增長 extension = mongodb.so
9./usr/local/php/bin/php -m
10./etc/init.d/php-fpm restart
實例:
二方案
[root@axinlinux-01 src]# wget https://pecl.php.net/get/mongodb-1.3.0.tgz
[root@axinlinux-01 src]# tar -zxf mongodb-1.3.0.tgz
[root@axinlinux-01 src]# cd mongodb-1.3.0/
[root@axinlinux-01 mongodb-1.3.0]# /usr/local/php-fpm/bin/phpize
[root@axinlinux-01 mongodb-1.3.0]# ./configure --with-php-config=/usr/local/php-fpm/bin/php-config
[root@axinlinux-01 mongodb-1.3.0]# echo $?
0
[root@axinlinux-01 mongodb-1.3.0]# make
root@axinlinux-01 mongodb-1.3.0]# make install
Installing shared extensions: /usr/local/php-fpm/lib/php/extensions/no-debug-non-zts-20131226/ #會在這個路徑下生成.so的文件
[root@axinlinux-01 mongodb-1.3.0]# ls /usr/local/php-fpm/lib/php/extensions/no-debug-non-zts-20131226/
memcache.so mongodb.so opcache.a opcache.so redis.so
[root@axinlinux-01 mongodb-1.3.0]# vim /usr/local/php-fpm/etc/php.ini
;extension=php_shmop.dll
extension=memcache.so
extension=redis.so
extension=mongodb.so #在此增長mongodb.so的擴展
[root@axinlinux-01 mongodb-1.3.0]# /usr/local/php-fpm/sbin/php-fpm -m #查看有無額mongodb的模塊
mongodb
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
21.32 php的mongo擴展
!!mongodb.so與mongo.so的區別:
mongo.so擴展針對的是php的5.x版本,並且mongon.so也是一個比較老的擴展。之後就逐漸的不在使用了。而是使用mongodb.so的擴展。可是目前不少程序員寫的代碼裏面都是基於mongo.so擴展的。因此這兩種都要會
建議連個都裝,以防不時之需
到pecl官網上下載mongo的擴展源碼包
1.cd /usr/local/src/
2.wget https://pecl.php.net/get/mongo-1.6.16.tgz
#步驟基本與mongodb同樣,可是注意下載的包不同
3.tar zxvf mongo-1.6.16.tgz
4.cd mongodb-1.6.16
5./usr/local/php/bin/phpize
6. ./configure --with-php-config=/usr/local/php-fpm/bin/php-config
#注意路徑,此處爲lnmp環境的
7.make && make install
8.vi /usr/local/php/etc/php.ini //增長 extension = mongo.so
9./usr/local/php/bin/php -m
測試mongo擴展
!!測試的代碼是針對mongo.so擴展模塊的。由於函數(代碼中的)是在mongo.so裏面,加入你只安裝了mongodb的模塊,沒有安裝mongo的模塊,那用這個代碼是會報錯的
1.參考文檔 https://docs.mongodb.com/ecosystem/drivers/php/,裏面有其餘的代碼段。好比插入一些數據等(用腳本的方式),總之很牛逼
2.http://www.runoob.com/mongodb/mongodb-php.html
3.vi /data/wwwroot/default/mongo.php(路徑要看一下nginx虛擬主機路徑) //增長
<?php
$m = new MongoClient(); // 鏈接
$db = $m->test; // 獲取名稱爲 "test" 的數據庫
$collection = $db->createCollection("runoob");
echo "集合建立成功";
?>
curl localhost/1.php
實例:
安裝mongo.so模塊擴展:
[root@axinlinux-01 ~]# cd /usr/local/src/
[root@axinlinux-01 src]# wget https://pecl.php.net/get/mongo-1.6.16.tgz
[root@axinlinux-01 src]# tar -zxf mongo-1.6.16.tgz
[root@axinlinux-01 src]# cd mongo-1.6.16/
[root@axinlinux-01 mongo-1.6.16]# /usr/local/php-fpm/bin/phpize
[root@axinlinux-01 mongo-1.6.16]# ./configure --with-php-config=/usr/local/php-fpm/bin/php-config
#這個路徑不要寫錯了,實驗就是寫成了lamp的php路徑,致使模塊-m不出來
[root@axinlinux-01 mongo-1.6.16]# make
[root@axinlinux-01 mongo-1.6.16]# make install
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20131226/
[root@axinlinux-01 mongo-1.6.16]# ls /usr/local/php/lib/php/extensions/no-debug-zts-20131226/
mongo.so opcache.so
[root@axinlinux-01 mongo-1.6.16]# vim /usr/local/php-fpm/etc/php.ini
;extension=php_shmop.dll
extension=memcache.so
extension=redis.so
extension=mongodb.so
extension=mongo.so #加入extension=mongo.so
[root@axinlinux-01 mongo-1.6.16]# /usr/local/php-fpm/sbin/php-fpm -m
mongo
測試mongo.so擴展模塊:
[root@axinlinux-01 vhost]# cat aaa.com.conf 看一下nginx虛擬主機的root路徑,腳本要放在這裏面
[root@axinlinux-01 vhost]# vim /data/wwwroot/default/mongo.php #加入如下代碼
<?php
$m = new MongoClient(); // 鏈接
$db = $m->test; // 獲取名稱爲 "test" 的數據庫 #等下咱們還要去mongodb裏面去看一下有沒有建立這個test的庫
$collection = $db->createCollection("runoob"); #還要看一下有沒有runoob集合
echo "集合建立成功";
?>
[root@axinlinux-01 default]# curl localhost/mongo.php
集合建立成功 #輸出該字段即爲成功
[root@axinlinux-01 default]# mongo -u "admin" -p "admin122" --authenticationDatabase "admin" #用戶名密碼登陸mongodb
> use test
switched to db test
> show tables #show tables的時候,發現沒有出來集合。懷疑是--auth(以前設置的用戶名密碼登陸的緣由)。咱們先把--auth取消掉
[root@axinlinux-01 default]# vim /usr/lib/systemd/system/mongod.service
Environment="OPTIONS=--auth -f /etc/mongod.conf" #把--auth去掉
[root@axinlinux-01 default]# systemctl restart mongod #重啓mongod
Warning: mongod.service changed on disk. Run 'systemctl daemon-reload' to reload units. #當動過monggod.server的配置文件,都會提示要執行一下systemctl daemon-reload
[root@axinlinux-01 default]# systemctl daemon-reload
[root@axinlinux-01 default]# systemctl restart mongod #再次重啓就不會了
那接下來mongodb就不在使用用戶名密碼認證了
[root@axinlinux-01 default]# curl localhost/mongo.php
集合建立成功
[root@axinlinux-01 default]# mongo -host 192.168.208.128 -port 27017 #登陸mongodb
> use test
switched to db test
> show tables
runoob