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数据库

相关文章
相关标签/搜索