21.30 mongodb创建集合、数据管理(删除查找等等)
21.31 php的mongodb.so扩展 (两种扩展的不同)
21.32 php的mongo扩展
扩展内容
mongodb安全设置 http://www.mongoing.com/archives/631
mongodb执行js脚本 http://www.jianshu.com/p/6bd8934bd1ca
21.30 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