82.mongodb語句 兩種擴展

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

相關文章
相關標籤/搜索