mogodb学习报告(一)

概述


MongoDB是什么?

MongoDB的作用,使用场景?

MongoDB的使用方式?

<br />

MongoDB是什么,有什么特点。


MongoDB是一种NoSql数据库,是一个使用C++开发的高性能,开源,无模式的文档型数据库。MongoDB是面向文档的,文档以JSON格式,二进制JSON (BSON) 存储在MongoDB中。官方网站地址是:http://www.mongodb.org/

主要特点有:面向集合存储,易存储对象类型的数据,模式自由并且支持动态查询。支持完全索引,查询,支持服务器之间的数据复制和故障恢复。使用高效的二进制数据存储,包括大型对象(如视频等)。自动处理碎片,以支持云计算层次的扩展性,可动态添加额外的机器。支持Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++等

MongoDB的作用,使用场景?


适用场景
  • 网站实时数据处理,它非常适合实时的插入、更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
  • 大尺寸,低价值的数据,使用传统的关系型数据库存储一些数据时可能会比较昂贵,可以用MongoDB代替。
  • 高伸缩性的场景,非常适合由数十或数百台服务器组成的数据库。
不适用场景
  • 要求高度事务性的系统,不可靠环境保证高可用性
  • 复杂的跨文档(表)级联查询。

MongoDB使用方式


MongoDB安装(CentOS6.5)

根据系统类型和位数选择合适的安装包。Linux 32-bit legacy 这个版本不推荐在正式环境使用,这个版本特点是没有连接ssl相关的库,并且可能缺少针对操作系统的一些性能优化,但是可以测试用,安装简单。推荐按相应操作系统版本选择对应的安装包如centos6 rhel6选择RHEL 6 Linux 64-bit。

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.7.tgz -P /tmp/

创建数据库文件夹,日志文件夹和编写编辑文件

mv /tmp/mongodb-3.2.7 /usr/local/mongodb
cd /usr/local/mongodb
mkdir db
mkdir logs
cd bin

编写配置文件

vim /usr/local/mongodb/mongodb.conf
dbpath = /usr/local/mongodb/db   #数据库地址
logpath= /usr/local/mongodb/logs/mongodb.log #日志
port = 27017 #端口
journal=no #不持久化,灾备
storageEngine=mmapv1 #3.0以上默认使用wiredTiger,系统不支持可以切换回mmapv1(待深究)
fork=yes #后台运行,守护进程
pidfilepath = /var/run/mongodb/mongod.pid 
auth = true #开启验证

开启MongoDB服务

/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/bin/mongodb.conf #开启服务
echo "/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/bin/mongodb.conf" > /etc/rc.local #设置开机启动

添加超级管理员

/usr/local/mongodb/bin/mongo #连接mongodb

#切换admin数据库,如果不存在自动创建
use admin 
#3.0以下用addUser。role权限,db指数据库。root超级管理员,还有其他的权限如_system内部角色,UserAdmin,dbAdmin等
db.createUser({    
    user:"admin", 
    pwd:"123456", 
    roles:[{role:"root",db:"admin"}]  #
})

#验证用户,登录
db.auth("admin","123456")  

修改防火墙配置

#首先,所有访问27017 端口的请求都会被拒绝
iptables -I INPUT -p tcp --dport 27017 -j DROP
#当然,自己不能被挡在外面,给自己开个后门
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 27017 -j ACCEPT(出于业务逻辑的需要,有时还需要对服务器的公网IP授权)
#保存修改
/etc/rc.d/init.d/iptables save  
#重启防火墙
service iptables restart

MongoDB的数据库常用操作命令

# 帮助文档,yourColl指的是集合
help
db.help()
db.yourColl.help()
db.youColl.find().help()
rs.help();
#显示所有数据库
show dbs
#当前数据库
db
#显示所有用户
show users;

用户命令

# 切换数据库,用户登录前必须切换到对应的数据库。超级管理员权限也无法在非用户对应的数据库登录。
use admin
# 用户登录
db.auth("username","pwd");
# 显示当前验证用户的权限。
show roles 

切换数据库,添加数据

use test
# 显示test数据库里面的所有集合,数据表
show collections
# 插入数据
db.user.insert({
  username:"lance",
  age:"18",
  grande:"男",
  job:['coder','PHPer']
})
db.user.insert({
  username:"maven",
  age:"28",
  grande:"男",
  job:['designer','coder']
})

查询数据

# 默认显示20条,DBQuery.shellBatchSize=NUM控制显示调试,it翻页
db.user.find(); 
# 格式化输出
db.user.find().pretty() 
# 条件查询相当于where username="lance"
db.user.find({username:"lance"}) 
# select age,job where username="maven",1表示显示,0表示不显示,用true或者false也可以。
db.user.find({username:"maven"},{age:1,job:1}) 

# 相当于where age >=20, $gt大于,$lt小于,$ne不等于。
# 按理应取到maven的数据,但maven的age字段是字符串类型,搜索条件的age是int类型,得不到数据。应该用db.user.find({age:{$gte:"20"}})
db.user.find({age:{$gte:20}}) 
# 相当于where username like "la%",正则表达式^$
db.user.find({username: /^la/});

# sort 排序,1为升序,-1为降序
db.user.find().sort({age: 1}); 
# 获取前5条数据
db.user.find().limit(5); 
# 跳过前5条,获取10条数据,用于分页
db.user.find().limit(10).skip(5);
# where age = '18' or age= '28',或查询
db.user.find({$or: [{age: 18}, {age: 28}]}); 

更新数据

db.user.update({'username':'maven'},{$set:{'age':'20'}}) #更新一条数据
db.user.update({'username':'maven'},{$set:{'age':'20'}},{multi:true})#更新所以符合条件的数据
db.user.update({'username':'maven'},{$set:{'age':'20'}},{upsert:true})#如果需要更新的数据不存在则插入一条数据。

删除数据

db.user.remove({'username':'lance'}) #删除符合条件的所以数据
db.user.remove({'username':'lance'},{justOne:1})#只删除一条数据
部分测试代码

MongoDB的PHP扩展和使用方法

GitHut源地址:https://github.com/mongodb/mongo-php-driver
可以用prec方式安装,或者编译安装扩展生成mongo.so。
修改php.ini文件,在php.ini文件中添加mongo配置,配置如下:

extension=mongo.so

php连接mongodb

// 连接默认主机和端口为:mongodb://localhost:27017
$m = new MongoClient(); 
// 获取名称为 "test" 的数据库,不存在自动创建
$db = $m->test; 

创建集合collection

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

插入数据

// 选择集合
$collection = $db->runoob;
$document = array(  "title" => "MongoDB", "description" => "database");
$collection->insert($document);

查询数据

//count()获取条数,findOne()获取单条数据。sort排序。其中 1 为升序排列,而-1是用于降序排列,参数的先后影响排序顺
$collection->find()->sort(array('code'=>1,'money'=>-1));
$collection->find()->fields(array("title"=>false));    //不显示title
$collection->find()->fields(array("title"=>true));     //只显示title列    
$collection->find()->limit(1)->skip(1);//跳过 1 条记录,取出 1条  
$collection->find(array("money" => array('$in'=>array(20,30,90)))); //in查询

模糊查询

$param = array("title" => new MongoRegex('/db/'));    //like '%str%' 糊查询集合中的数据 ,正则^$
$result = $collection->find($param);  

更新数据

// 更新文档
$collection->update(array("title"=>"MongoDB"),array('$set'=>array("title"=>"MongoDB 教程")));

删除数据

$collection->remove(array("title"=>"MongoDB 教程"), array("justOne" => true))

MongoDB的常用工具

可视化工具:MongoChef

MongoChef管理界面

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容