首页 » 网站建设 » phpmongobetween技巧_20201002MongoDB安装笔记

phpmongobetween技巧_20201002MongoDB安装笔记

访客 2024-12-09 0

扫一扫用手机浏览

文章目录 [+]

MongoDB是一个文档数据库引擎,文档数据库和MySQL这种关系型数据库是不一样的设计,文档数据库和Redis这种Key-Value数据库也有很大差别。
不过文档数据库和Key-Value数据库都属于NoSQL型的数据库,也便是说MongoDB也是不支持SQL语句的。

MongoDB相对付MySQL数据库来说有一项独占的非常强大的特点,便是MongoDB的数据表构造是自由的,可以针对每一个文档(一行数据)定义不同的字段。

phpmongobetween技巧_20201002MongoDB安装笔记

MongoDB的文档的存储格式是主流的数据个数JSON,JSON数据是可以设计成一个树状构造的,可以将一个工具的属性以及子属性、孙属性乃至更详细的属性保存到一个JSON数据当中,而MongoDB的一个文档就可以保存它,而无需事先设计好数据表构造来适应这种工具。

phpmongobetween技巧_20201002MongoDB安装笔记
(图片来自网络侵删)
基本信息

安装环境

CentOS:CentOS Linux release 7.6.1810 (Core)Linux:Linux version 3.10.0-1062.el7.x86_64GCC:gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)

软件版本

mongodb-linux-x86_64-rhel70-4.2.2.tgz

准备事情

本地化

如果是新环境,我们须要设置时区以担保韶光显示精确

timedatectlset-timezoneAsia/Shanghai

安装wget

如果环境里没有wget,通过yum安装一下

yum-yinstallwget

安装依赖包

yum-yinstalllibaionumactl-libs

建立环境根目录

mkdir-p/tongfu.net/env/

建立安装包目录并进入

mkdir/packagescd/packages安装MongoDB 4.2

官网下载

从官网下载

wgethttps://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.2.tgz

网盘下载

如果官网下载太慢,可以从网盘下载

链接: https://pan.baidu.com/s/1KjL759qM81Ix_ZRZZxdepg 提取码: yvpi

安装

设置mongo环境变量

[root@tfdevenv]#vi/etc/profileexportMONGODB_HOME=/tongfu.net/env/mongodb-4.2.2exportPATH=$MONGODB_HOME/bin:$PATH

立即启用环境变量

source/etc/profile

创建用户

useraddmongo

解压缩

tar-xzvfmongodb-linux-x86_64-rhel70-4.2.2.tgz-C/tongfu.net/env/cd/tongfu.net/env/mvmongodb-linux-x86_64-rhel70-4.2.2/mongodb-4.2.2

建立数据目录

mkdir/tongfu.net/env/mongodb-4.2.2/confmkdir/tongfu.net/env/mongodb-4.2.2/datamkdir/tongfu.net/env/mongodb-4.2.2/logs

建立配置文件

[root@tfdevenv]#vi/tongfu.net/env/mongodb-4.2.2/conf/mongodb.confdbpath=/tongfu.net/env/mongodb-4.2.2/data/logpath=/tongfu.net/env/mongodb-4.2.2/logs/mongodb.logbind_ip=0.0.0.0wiredTigerCacheSizeGB=2auth=truejournal=true

设置权限

chownmongo.mongo-R/tongfu.net/env/mongodb-4.2.2/

自动启动

添加自动启动脚本

[root@tfdevenv]#cat>/lib/systemd/system/mongod.service<<EOF[Unit]Description=mongodAfter=network.target[Service]Type=forkingUser=mongoGroup=mongoExecStart=/tongfu.net/env/mongodb-4.2.2/bin/mongod-f/tongfu.net/env/mongodb-4.2.2/conf/mongodb.conf--forkExecStop=/tongfu.net/env/mongodb-4.2.2/bin/mongod-f/tongfu.net/env/mongodb-4.2.2/conf/mongodb.conf--shutdownPrivateTmp=true[Install]WantedBy=multi-user.targetEOF

运行自动启动

systemctlenablemongod#设置自动启动systemctlstartmongod#启动做事systemctlstopmongod#停滞做事systemctlrestartmongod#重启做事

做事命令添加到系统目录

ln-s/tongfu.net/env/mongodb-4.2.2/bin/mongo/usr/bin/

连接数据库admin

首次登录,无需用户名和密码,直接连接 admin 数据库

/tongfu.net/env/mongodb-4.2.2/bin/mongo127.0.0.1:27017/admin

创建超级用户

设置超级用户root

db.createUser({user:"root",pwd:"abcdef",roles:[{role:"readWriteAnyDatabase",db:"admin"},{role:"userAdminAnyDatabase",db:"admin"},{role:"dbAdminAnyDatabase",db:"admin"}]});

重新连接数据库admin

利用超级用户root连接数据库admin

/tongfu.net/env/mongodb-4.2.2/bin/mongo-uroot-pabcdef127.0.0.1:27017/admin

创建数据库

创建数据 field

usefield

插入一条数据到表 field

db.field.insert({"id":1,"uName":"萝卜","age":21})

查询表 field 的所有数据

db.field.find()

插入一条数据到表 logs

db.logs.insert({"id":1,"event":"createrecord"})

查看所有数据库

showdbs

查看所有数据表(凑集)

showcollections

总结

mongodb的数据库实在便是一个根文件夹mongodb的数据表便是根文件夹下的子文件夹mongodb的数据行便是子文件夹下的一个文件,多行数据便是多个文件mongodb的数据没有字段观点,便是一个大JSON数据构造,也便是一个字符串mongodb供应了很多方法去查询这些数据数据导出/导入

导出数据

通过下面的命令导出全体数据库

mongodump-u$user-p$passwd-h$host--port$port-d$dbname-o$backupDir

导入数据

通过下面的命令规复全体数据库

把稳:备份出来的目录下面会有备份的数据库的文件夹,要指定到这一级才行

mongorestore-u$user-p$passwd-h$host--port$port-d$dbname$backupDir/$dbnameMongoDB用户管理

创建用户

利用无认证模式启动mongod

选择admin数据库

useadmin

创建root用户

db.createUser({user:"root",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"},{role:"dbAdminAnyDatabase",db:"admin"},{role:"readWriteAnyDatabase",db:"admin"}]})

利用认证模式重启mongod

用root登录到admin

/tongfu.net/env/mongodb-3.6.2/bin/mongo-uroot-p123456admin

选择test数据库

usetest

为test库创建用户test

db.createUser({user:"test",pwd:"123456",roles:[{role:"dbAdmin",db:"test"},{role:"readWrite",db:"test"}]})

退出root登录

利用test登录到test

/tongfu.net/env/mongodb-3.6.2/bin/mongo-utest-p123456test

修正用户

用root登录到admin

/tongfu.net/env/mongodb-3.6.2/bin/mongo-uroot-p123456admin

选择test数据库

usetest

修正密码

db.updateUser('test',{pwd:"654321"})

删除用户

用root登录到admin

/tongfu.net/env/mongodb-3.6.2/bin/mongo-uroot-p123456admin

选择test数据库

usetest

删除test(居然可以删自己!


db.dropUser('test')

查看用户列表

1、登录到admin数据库

2、选择admin数据库

useadmin

3、查看用户列表

db.system.users.find()

总结

创建、修正、删除用户必须有权限用户可以删除自己!


调度哪个库的用户表要先选择哪个库查看用户列表必须到admin库下操作建议弄一个root超级用户,然后给每个库一个独立账号

用户角色

Read:许可用户读取指天命据库readWrite:许可用户读写指天命据库dbAdmin:许可用户在指天命据库中实行管理函数,如索引创建、删除,查看统计或访问system.profileuserAdmin:许可用户向system.users凑集写入,可以找指天命据库里创建、删除和管理用户clusterAdmin:只在admin数据库中可用,授予用户所有分片和复制集干系函数的管理权限。
readAnyDatabase:只在admin数据库中可用,授予用户所有数据库的读权限readWriteAnyDatabase:只在admin数据库中可用,授予用户所有数据库的读写权限userAdminAnyDatabase:只在admin数据库中可用,授予用户所有数据库的userAdmin权限dbAdminAnyDatabase:只在admin数据库中可用,授予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。
超级账号,超级权限
坑爹一

认证失落败的办理方法

刚刚安装好的环境,利用MongoClient去连接做事器,结果去世活报认证缺点。
明明是精确的用户名,密码,数据啊~~

从网上查创造旧版本的mongo扩展用的是 MONGODB-CR认证办法。
而最新版的MongoDB做事器得用Scram-SHA-1认证办法

好吧,升级mongo扩展到1.6.13,办理了~~

TFAPI操作MongoDB的方法

示例

//引入adodbj包,adodbj为JSON行数据库的统称linking('dbj.adodbj');//连接MongoDB做事器$myDbjObj=newadodbj("driver=mongo;server=localhost;port=27017;uid=field;pwd=abcdef;database=field;charset=utf-8;");//查看数据库列表(须要有访问admin的权限)//$dbArr=$myDbjObj->getDbs();var_dump($dbArr);$condArr=array('domainName'=>array('$regex'=>"ali213",'$options'=>"iq"),);//查询数据数量$ret=$myDbjObj->count("urls",$condArr);$this->showRet($ret,"count");//查询所有数据$ret=$myDbjObj->search("urls",$condArr,0,10,array('_id'=>-1,'domainName'=>-1));foreach($retas$itm){$this->showRet($itm,"search");}//添加记录,ID为1$ret=$myDbjObj->add("urls",array('domainName'=>"www.ali213.net".rand(1111,9999)),1);$this->showRet($ret,"add");//手动添加1000条数据,ID为1+$ifor($i=0;$i<1000;$i++){$ret=$myDbjObj->mod("urls",$i+1,array('domainName'=>"www.ali213.net".rand(1111,9999),'idx'=>rand(111,999)));///$this->showRet($ret,"mod");}//通过mod修正一条数据,ID为1$ret=$myDbjObj->modRange("urls",array('_id'=>1),array('weight'=>33));$this->showRet($ret,"modRange");//查看数据,ID为1$ret=$myDbjObj->get("urls",1);$this->showRet($ret,"get");//查看索引$ret=$myDbjObj->getIndexes("urls");$this->showRet($ret,"getindexes");//创建索引$ret=$myDbjObj->createIndex("urls",array('domainName'=>1));$this->showRet($ret,"createindex");//删除索引$ret=$myDbjObj->dropIndex("urls",array('domainName'=>1));$this->showRet($ret,"dropindex");//打消所有索引$ret=$myDbjObj->dropIndexes("urls");$this->showRet($ret,"dropindexes");TFAPI操作MongoDB的方法(新)

观点

新版本的MongoDB驱动完备变了样,一样平常情形下我们还是喜好用旧版本的工具怎么办呢?没有关系,官方供应了一个第三方PHP库,封装了新版本的PHP扩展的工具,和老版本的工具及其相似我们TFAPI也将这个库引入了进来,放到了 driver/mongo 下

利用技巧

//引入adodbj包,adodbj为JSON行数据库的统称linking('dbj.adodbj');//连接MongoDB做事器,把稳:这里的driver是mongo2不是mongo了!

$myDbjObj=newadodbj("driver=mongo2;server=localhost;port=27017;uid=field;pwd=abcdef;database=field;charset=utf-8;");//查看数据库列表(须要有访问admin的权限)//$dbArr=$myDbjObj->getDbs();var_dump($dbArr);$condArr=array('domainName'=>array('$regex'=>"ali213",'$options'=>"iq"),);//查询数据数量$ret=$myDbjObj->count("urls",$condArr);$this->showRet($ret,"count");//查询所有数据$ret=$myDbjObj->search("urls",$condArr,0,10,array('_id'=>-1,'domainName'=>-1));foreach($retas$itm){$this->showRet($itm,"search");}//添加记录,ID为1$ret=$myDbjObj->add("urls",array('domainName'=>"www.ali213.net".rand(1111,9999)),1);$this->showRet($ret,"add");//手动添加1000条数据,ID为1+$ifor($i=0;$i<1000;$i++){$ret=$myDbjObj->mod("urls",$i+1,array('domainName'=>"www.ali213.net".rand(1111,9999),'idx'=>rand(111,999)));///$this->showRet($ret,"mod");}//通过mod修正一条数据,ID为1$ret=$myDbjObj->modRange("urls",array('_id'=>1),array('weight'=>33));$this->showRet($ret,"modRange");//查看数据,ID为1$ret=$myDbjObj->get("urls",1);$this->showRet($ret,"get");//查看索引$ret=$myDbjObj->getIndexes("urls");$this->showRet($ret,"getindexes");//创建索引,只能一个一个创建了$ret=$myDbjObj->createIndex("urls",array('domainName'=>1));$this->showRet($ret,"createindex1");$ret=$myDbjObj->createIndex("urls",array('visits'=>2));$this->showRet($ret,"createindex2");//删除索引,只能一个一个删除了$ret=$myDbjObj->dropIndex("urls",'domainName_1');$this->showRet($ret,"dropindex1");$ret=$myDbjObj->dropIndex("urls",'visits_2');$this->showRet($ret,"dropindex2");//打消所有索引$ret=$myDbjObj->dropIndexes("urls");$this->showRet($ret,"dropindexes");
MongoDB查询技巧

第一批

//分外查询语句示例//selectfromurlswhereurl='http://tfapi.tongfu.net/'$myDbjObj->search("urls",array('url'=>"http://tfapi.tongfu.net/"));//selectfromurlswhereurllike'tongfu.net'$myDbjObj->search("urls",array('url'=>array('$regex'=>"tongfu.net")));//selectfromurlswherevisit>100andvisit<1000$myDbjObj->search("urls",array('visit'=>array('$gt'=>100,'$lt'=>1000)));//selectfromurlswhereweightbetween3and5$myDbjObj->search("urls",array('weight'=>array('$gte'=>3,'$lte'=>5)));//selectfromurlswhereurlType<>'res'$myDbjObj->search("urls",array('urlType'=>array('$ne'=>"res")));//selectfromurlswhereurlMediaTypein('avi','rmvb','rm')$myDbjObj->search("urls",array('urlMediaType'=>array('$in'=>array("avi","rmvb","rm"))));//selectfromurlswhereurlMediaTypenotin('mov','mp4')$myDbjObj->search("urls",array('urlMediaType'=>array('$nin'=>array("mov","mp4"))));//selectfromurlswherecatchTool='bd'orcatchTimes>0$myDbjObj->search("urls",array('$or'=>array('catchTool'=>"bd",'catchTimes'=>array('$gt'=>0))));$myDbjObj->search("urls",array('urlExtension'=>array('$all'=>array("img","js","css"))));

第二批

//selectfromurlswhere(_idmod5)=1$myDbjObj->search("urls",array('_id'=>array('$mod'=>array(5,1))));//selectfromurlswherenot(catchTimes<100)$myDbjObj->search("urls",array('$not'=>array('catchTimes'=>array('$lt',100))));//数组中元素同时包含fullhead$myDbjObj->search("urls",array('catchType'=>array('$all'=>array('full','head'))));//数组中第2个元素为head$myDbjObj->search("urls",array('catchTypes.1'=>"head"));//数组元素个数是5个$myDbjObj->search("urls",array('catchTypes'=>array('$size'=>5)));//嵌套查询$myDbjObj->search("urls",array('catchInfo.status'=>"fail",'catchInfo.datetime'=>"2018-1-2615:12:11"));//嵌套查询,假定元素是数组的情形下$myDbjObj->search("urls",array('catchInfo',array('$elemMatch'=>array('status'=>"fail",'datetime'=>"2018-1-2615:12:11"))));//繁芜查询情形(这种办法效率比较慢)//只管即便依照正则>MapReduce>$where这个顺序设计$myDbjObj->search("urls",array('$where',"catchTimes>0andcatchType=='head'"));$myDbjObj->search("urls",array('$where',"function(){varresult=catchTimes>0andcatchType=='head';returnresult;}"));//排序,分页实现//根据_id反序排列,同时从100行开始取10行数据$myDbjObj->search("urls",array(),100,10,array('_id'=>-1));

第三批

//将键weightNum的值进行数字增减操作(只能是数字类型)$ret=$myDbjObj->modRange("urls",array('_id'=>1),array('$inc'=>array('weightNum'=>1)));$this->showRet($ret,"modRange$inc");//向知足条件的文档设置键weightStr值为high(支持嵌套,请利用点符号)$ret=$myDbjObj->modRange("urls",array('_id'=>1),array('$set'=>array('weightStr'=>"high")));$this->showRet($ret,"modRange$set");//从知足条件的文档删除键weight.x(支持嵌套,请利用点符号)$ret=$myDbjObj->modRange("urls",array('_id'=>1),array('$unset'=>array('weightStr'=>1)));$this->showRet($ret,"modRange$unset");//向知足条件的文档的键weightRecord数组追加元素值为s1(不检讨重复性)(支持嵌套,请利用点符号)$ret=$myDbjObj->modRange("urls",array('_id'=>1),array('$push'=>array('weightRecord'=>"s1")));$this->showRet($ret,"modRange$push");$ret=$myDbjObj->modRange("urls",array('_id'=>1),array('$push'=>array('weightRecord'=>"s1")));$this->showRet($ret,"modRange$push");//向知足条件的文档的键weightRecord数组追加元素值为s1(检讨重复性)(支持嵌套,请利用点符号)$ret=$myDbjObj->modRange("urls",array('_id'=>1),array('$addToSet'=>array('weightRecord'=>"s1")));$this->showRet($ret,"modRange$addToSet");//向知足条件的文档的键weightRecord数组追加一组元素$ret=$myDbjObj->modRange("urls",array('_id'=>1),array('$addToSet'=>array('weightRecord'=>array('$each'=>array("s1","s2","s3")))));$this->showRet($ret,"modRange$each");//利用$pop对键weightRecord数组进行删除元素操作//删除数组末了位置元素$ret=$myDbjObj->modRange("urls",array('_id'=>1),array('$pop'=>array('weightRecord'=>1)));$this->showRet($ret,"modRange$pop");//删除数组末了位置元素$ret=$myDbjObj->modRange("urls",array('_id'=>1),array('$pop'=>array('weightRecord'=>-1)));$this->showRet($ret,"modRange$pop");//删除数组末了位置元素$ret=$myDbjObj->modRange("urls",array('_id'=>1),array('$pop'=>array('weightRecord'=>0)));$this->showRet($ret,"modRange$pop");//删除数组匹配条件的元素$ret=$myDbjObj->modRange("urls",array('_id'=>1),array('$pull'=>array('weightRecord'=>"s2")));$this->showRet($ret,"modRange$pull");

https://m.tongfu.net/home/35/blog/100588.html

标签:

相关文章

php指针应用技能技巧_10分钟掌握C措辞指针

在讲指针之前,我们先来理解下变量在「内存」中是如何存放的。在程序中定义一个变量,那么在程序编译的过程中,系统会根据你定义变量的类型...

网站建设 2024-12-10 阅读0 评论0

php界名人技巧_计算机界十位顶级人物

今天主要想和大家一起来理解一下打算机界那些为开源做出巨大贡献大佬们!吃水不忘挖井人,我们每天用着别人写的开源操作系统、编程措辞、工...

网站建设 2024-12-10 阅读0 评论0