linux 学习笔记-083-NoSQL-mongodb 创建集合和数据管理,php 的 mongodb 扩展和 mongo 扩展

发布于 2018-05-11  198 次阅读


MongoDB 库管理

db.version()  //查看版本

use userdb  //如果库存在就切换,不存在就创建

show dbs //查看库,此时 userdb 并没有出现,这是因为该库是空的,还没有任何集合,只需要创建一个集合就能看到了

db.createCollection('clo1') //创建集合 clo1,在当前库下面创建

db.dropDatabase() //删除当前库,要想删除某个库,必须切换到那个库下

db.stats()  //查看当前库的信息

db.serverStatus()   //查看 mongodb 服务器的状态

MongoDB 创建集合

使用 test1 做实验

> use db1

switched to db db1

> db.auth("test1","123456")

1

创建集合

> db.createCollection("mycol",{capped:true,size:6142800,max:10000})

{ "ok" : 1 }

#语法:db.createCollection(name,options)

#name 就是集合的名字,options 可选,用来配置集合的参数,参数如下

#capped true/false(可选)如果为 true,则启用封顶集合。封顶集合是固定大小的集合,当它达到其最大大小,会自动覆盖最早的条目。如果指定 true,则也需要指定尺寸参数。

#autoindexID  true/false (可选)如果为 true,自动创建索引 _id 字段的默认值是 false。

#size(可选)指定最大大小字节封顶集合。如果封顶如果是 true,那么你还需要指定这个字段。单位 B

#max (可选)指定封顶集合允许在文件的最大数量

MongoDB 数据管理

show collections //查看集合,或者使用 show  tables

> show collections

mycol

> show tables

mycol

db.Account.insert({AccountID:1,UserName:"123",password:"123456"})  //如果集合不存在,直接插入数据,则 mongodb 会自动创建集合

> db.Account.insert({AccountID:1,UserName:"123",password:"123456"})

WriteResult({ "nInserted" : 1 })

> show tables

Account

mycol

db.Account.update({AccountID:1},{"$set":{"Age":20}}) //更新

> db.Account.update({AccountID:1},{"$set":{"Age":20}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

db.Account.find()   //查看所有文档

> db.Account.find()

{ "_id" : ObjectId("5af4776e940094b8a66ac2fb"), "AccountID" : 1, "UserName" : "123", "password" : "123456", "Age" : 20 }

{ "_id" : ObjectId("5af477b2940094b8a66ac2fc"), "AccountID" : 2, "UserName" : "abc", "password" : "123456" }

db.Account.find({AccountID:1})   //根据条件查询

> db.Account.find({AccountID:2})

{ "_id" : ObjectId("5af477b2940094b8a66ac2fc"), "AccountID" : 2, "UserName" : "abc", "password" : "123456" }

db.Account.remove({AccountID:1})  //根据条件删除

> db.Account.remove({AccountID:1})

WriteResult({ "nRemoved" : 1 })

> db.Account.find()

{ "_id" : ObjectId("5af477b2940094b8a66ac2fc"), "AccountID" : 2, "UserName" : "abc", "password" : "123456" }

db.Account.drop() //删除所有文档,即删除集合

> db.Account.drop()

true

> show tables

mycol

use dbname  //先进入对应的库

db.printCollectionStats()  // 然后查看集合状态

> db.am.insert({AccountID:1,UserName:"123",password:"123456"})

WriteResult({ "nInserted" : 1 })

> show tables

am

mycol

> db.printCollectionStats()

am

{

"ns" : "db1.am",

"size" : 80,

"count" : 1,

"avgObjSize" : 80,

"storageSize" : 16384,

"capped" : false,

………………省略部分输出信息………………

"ok" : 1

}

---

mycol

{

"ns" : "db1.mycol",

"size" : 0,

"count" : 0,

"storageSize" : 4096,

"capped" : true,

"max" : 10000,

"maxSize" : 6142976,

"sleepCount" : 0,

"sleepMS" : 0,

………………省略部分输出信息………………

"ok" : 1

}

---

PHP 的 mongodb 扩展

mongodb 针对 php 有两个扩展,分别为 mongodb.so 和 mongo.so

mongo.so 主要针对的是 php5.x 版本,版本较老的扩展

mongodb.so 主要针对的是新版本的 php,版本较新

二者用哪个,根据具体需求选择

PHP 连接 MongoDB - mongodb.so(方法 1,此处不详说)

cd /usr/local/src/

git clone https://github.com/mongodb/mongo-php-driver

cd mongo-php-driver

git submodule update --init

/usr/local/php/bin/phpize

./configure --with-php-config=/usr/local/php/bin/php-config

make && make install

vi /usr/local/php/etc/php.ini //增加 extension = mongodb.so

/usr/local/php/bin/php -m

PHP 连接 MongoDB - mongodb.so(方法 2,推荐)

如果 php 版本低,mongodb 扩展的版本就不能太高,会不兼容,这里为了兼容性,选择"mongodb-1.3.0"

[root@am-01:~#] cd /usr/local/src/

[root@am-01:/usr/local/src#] wget https://pecl.php.net/get/mongodb-1.3.0.tgz

--2018-05-11 01:40:21--  https://pecl.php.net/get/mongodb-1.3.0.tgz

正在解析主机 pecl.php.net (pecl.php.net)... 104.236.228.160

正在连接 pecl.php.net (pecl.php.net)|104.236.228.160|:443... 已连接。

已发出 HTTP 请求,正在等待回应... 200 OK

长度:927842 (906K) [application/octet-stream]

正在保存至: “mongodb-1.3.0.tgz”



100%[==============================================================================>] 927,842      226KB/s 用时 4.0s  



2018-05-11 01:40:32 (226 KB/s) - 已保存 “mongodb-1.3.0.tgz” [927842/927842])

[root@am-01:/usr/local/src#] tar xvf mongodb-1.3.0.tgz

[root@am-01:/usr/local/src#] cd mongodb-1.3.0/

[root@am-01:/usr/local/src/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@am-01:/usr/local/src/mongodb-1.3.0#] ./configure --with-php-config=/usr/local/php-fpm/bin/php-config

[root@am-01:/usr/local/src/mongodb-1.3.0#] make

[root@am-01:/usr/local/src/mongodb-1.3.0#] make install

Installing shared extensions:     /usr/local/php-fpm/lib/php/extensions/no-debug-non-zts-20131226/

[root@am-01:/usr/local/src/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@am-01:/usr/local/src/mongodb-1.3.0#] vim /usr/local/php-fpm/etc/php.ini

extension="mongodb.so"

[root@am-01:/usr/local/src/mongodb-1.3.0#] /usr/local/php-fpm/bin/php -m

[PHP Modules]

mongodb

[root@am-01:/usr/local/src/mongodb-1.3.0#] /etc/init.d/php-fpm restart

Gracefully shutting down php-fpm . done

Starting php-fpm  done

PHP 连接 MongoDB – mongo.so

[root@am-01:~#] cd /usr/local/src/

[root@am-01:/usr/local/src#] wget https://pecl.php.net/get/mongo-1.6.16.tgz

--2018-05-11 18:55:04--  https://pecl.php.net/get/mongo-1.6.16.tgz

正在解析主机 pecl.php.net (pecl.php.net)... 104.236.228.160

正在连接 pecl.php.net (pecl.php.net)|104.236.228.160|:443... 已连接。

已发出 HTTP 请求,正在等待回应... 200 OK

长度:210341 (205K) [application/octet-stream]

正在保存至: “mongo-1.6.16.tgz”



100%[==============================================================================>] 210,341      128KB/s 用时 1.6s  



2018-05-11 18:55:12 (128 KB/s) - 已保存 “mongo-1.6.16.tgz” [210341/210341])

[root@am-01:/usr/local/src#] tar xvf mongo-1.6.16.tgz

[root@am-01:/usr/local/src#] cd mongo-1.6.16/

[root@am-01:/usr/local/src/mongo-1.6.16#] /usr/local/php-fpm/bin/phpize

Configuring for:

PHP Api Version:         20131106

Zend Module Api No:      20131226

Zend Extension Api No:   220131226

[root@am-01:/usr/local/src/mongo-1.6.16#] ./configure --with-php-config=/usr/local/php-fpm/bin/php-config

[root@am-01:/usr/local/src/mongo-1.6.16#] make

[root@am-01:/usr/local/src/mongo-1.6.16#] make install

[root@am-01:/usr/local/src/mongo-1.6.16#] make install

Installing shared extensions:     /usr/local/php-fpm/lib/php/extensions/no-debug-non-zts-20131226/

[root@am-01:/usr/local/src/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

[root@am-01:/usr/local/src/mongo-1.6.16#] vim /usr/local/php-fpm/etc/php.ini

extension="mongo.so"

[root@am-01:/usr/local/src/mongo-1.6.16#] /usr/local/php-fpm/bin/php -m

[PHP Modules]

mongo

[root@am-01:/usr/local/src/mongo-1.6.16#] /etc/init.d/php-fpm restart

Gracefully shutting down php-fpm . done

Starting php-fpm  done

测试

测试代码参考文档:

https://docs.mongodb.com/ecosystem/drivers/php/

http://www.runoob.com/mongodb/mongodb-php.html

[root@am-01:/usr/local/src/mongodb-1.3.0#] cd

[root@am-01:~#] vim /data/wwwroot/default/1.php

<?php

$m = new MongoClient();

#连接

$db = $m->test;

#获取名称为 "test" 的数据库

$collection = $db->createCollection("runoob");

echo "集合创建成功";

?>

[root@am-01:~#] vim /usr/lib/systemd/system/mongod.service

Environment="OPTIONS=-f /etc/mongod.conf"

[root@am-01:~#] systemctl daemon-reload

[root@am-01:~#] systemctl restart mongod.service

#为了做实验,先把"--auth"去掉

[root@am-01:~#] curl localhost/1.php

集合创建成功

[root@am-01:~#] mongo

> use test

switched to db test

> show tables

runoob

#测试发现,已经新建了一个集合

扩展

mongodb 安全设置:
mongodb 执行 js 脚本: