mongodb创建集合、数据管理
创建集合
说明: 前面创建了test1用户,test1用户对db1库读写,对db2只读. 之所以先创建db1库,表示用户在db1库中创建,就一定要db1库验证身份,即用户的信息跟随数据库. 比如test1用户虽然有db2库的读取权限,但是一定要先在db1库进行身份验证,直接访问会提示验证失败.
登录:
[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这个集合.
给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,值是20
> 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}) -->根据条件查看文档
说明:可以指定集合的ID
> 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的扩展.
在PHP的官网有个问题,有两个扩展,一个是MongoDB.so,另一个是Mongo.so,Mongo.so的话
比较老的扩展,但仍有一个PHP程序写的代码有Mongo.so,所以这两个扩展都需要了解.
以下是官方的解释:
MongoDB.so :
目前维护的驱动程序是PECL提供的mongodb扩展。这个驱动程序可以独立使用,虽然它是非常裸体的。您应该考虑使用带有免费PHP库的驱动程序,该库可在裸机驱动程序之上实现更全功能的API。有关此架构的更多信息可以在PHP.net文档中找到。
Mongo.so:
mongo扩展是针对的PHP 5.x的旧版驱动程序。该mongo
扩展不再保持,新的项目建议使用mongodb
扩展和PHP库。社区开发的Mongo PHP适配器项目mongo
使用新的mongodb
扩展和PHP库来实现旧 扩展的API ,这对于希望迁移现有应用程序的用户来说可能是有用的。
安装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测试结果显示集合创建成功说明没有问题
[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去掉,不使用用户验证的方式登录
[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
来源:oschina
链接:https://my.oschina.net/u/3662885/blog/1553825