82.mongodb语句 两种扩展

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/3866149/blog/3030831

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值