mongodb 是一种非关系型的,面向文档的数据库,也是nosql类的产品

memcache,redis等等

与mysql最大的区别:
mongodb 使用javascript语言操作,保存是以json形式保存,mysql使用的是sql

mongodb 在读写方面性能非常快(插入,查询),相对数据来说,事务,视图,存储过程都没有,无模式

mongodb的扩展(实现分表,分库,读写分离,分布式存储)容易
mongodb适合存储:数据结构简单,数据量非常大,高并发读写的操作.像(日志系统,股票系统)

mongodb在保存关系复杂的数据时不太容易,不支付关系和连表操作相对数据中一对多和多对多的关系,不如mysql方便

实际操作:
1.安装mongodb
2.先创建一个目录(用来存放mongodb中的数据)和一个文件(mongodb的日志文件)

mongodb.exe --install --dbpath xxxx --logpath xxxx

3运行mongo.exe
mongo.exe ip地址:端口号/数据库名

mongodb 默认没有开启权限验证机制,如果要开启需要先创建好管理员账号才行

在客户端可以直接执行javascript代码
客户端的使用:
1.db变量的使用,当前正在使用的数据库
2.切换数据库: use 库名
3.查看所有的数据库 show dbs;
4.如何查看都有哪些命令,帮助系统 a)help系统级别帮助 b)db.help()数据库级别的帮助
c)db.集合名字.help() 集合级别的帮助

插入操作
db.goods.insert({'goods_name':'peak'}) 插入记录时如果记录中没有_id字段,mongodb会自动添加上一个id字段,这个字段的类型是objectId值是个字符串,这个字符串是全球唯一的
db.goods.find();查询
特点:mongodb执行的每个操作都是瞬间完成的,执行命令时,把命令发给服务器,就继续处理下一个,不会等待结果返回,所以客户端也不知道这次哦操作有没有成功

获取上次有没有成功 db.runcommand({getLastError:1})

特点:同一个集合中可以插入完

var u = db.goods.fin({'username':'tom'})
u.age =20;
db.goods.save(u);

var user = db.user.findone({'username':'tom'})

db.goods.update({'username':'tom'},{'age':50})

for(var i= 1;i<100;i++){
db.goods.insert({'username':'tom'})})
}

db.goods.update({'age':{'$lt':10}},{$set:{'age':99}},true,true);默认值改一个,第三个true就是添加上如果没有字段就直接添加上了 加上第四个true就全部修改了

mongodb权限机制
启动权限机制之前必须要先在mongodb中添加管理员账号:
1.选择数据库 use admin
2.db.addUser(用户名,密码,是否只读)
db.auth(用户名,密码) 登录

如:db.addUser('root','123',true);

启动权限机制: 需要重新安装一个mongodb,安装时添加一个--auth参数
1. xxx/xxx/mongod.exe --remove //先把安装好的从服务中删除掉(删除后之前的数据存在)
2.mongodb.exe --install --dbpath xxxx --logpath xxxx --auth
现在就开启了权限机制

开启权限后,必须先登录才能获取到数据
db.auth('test','admin');

登录超级管理员,必须先切换数据库
use admin
ad.auth(root','123')

如何使用php操作mongodb

要用php操作mongodb,必须装mongo扩展
1.先下载一个符合php服务器环境php_mongo.dll文件
2.解压后根据 php版本, 编译器compiler,线程安全,根据 php extension build选择 ,在phpinfo里面查看
3.把dll文件复制到 extension_dir 路径下
4.修改php.ini文件添加一行 extension=php_mongo_dll
5.重启apache
<?php

$mongo = new Mongo("mongodb://test:admin@127.0.0.1/php34");//用户名/密码/主机/数据库名
//查询出所有的记录,命令
$mongo->php34->goods->find();
foreach ($goods as $key => $value) {
echo $v['username'].'<br/>';
}

//插入命令
$mongo->php34->goods->insert(
array(
'username'=>'peak'
)
);
?>

新浪微博 redis
优酷视频 mongodb
视觉中国网站 mongodb
google bigtable
amazon simpledb
淘宝数据平台 tair

每条记录不超过16M

db.shutdownServer() 是在程序中停掉服务器

mongodb只能存储utf8
客户端将数据转化成Bson的形式,然后送入服务器
服务器解析BSON
检验是含"_id"键

支持的数据类型:
{'x':null}
{'x':true}
{'x':new date()}
{'x':/^abc/i}
{'x':function(){}}
{'x':undefined}
{'x':[1,2,3]}

删除数据:
db.user.remove({'age':10}) 删除user集合中年龄等于10的文档
remove只是删除掉记录,集合和索引还在
db.drop_collection("user")删除整个集合及索引,速度快
修改数组:
$push 数组添加
$pop 从数组的首或者尾取出数据
db.user.insert({"name":'abc'})
db.user.update({"name":"abc"},{"$push":{"friend":"bcd"}})
从abc的好友中删除最后一个好友
db.user.update({"name":"abc"},{"$pop":{"friend":1}})
从abc的好友中删除第一个好友
db.user.update({"name":"abc"},{"$pop":{"friend":-1}})
使用修改器:
$inc:加一个数字
$set:修改某一个字段,如果该字段不存在就增这个字段
把abc的年龄加2
db.user.update({"name":"abc"},{"$inc":{"age":2}})
修改abc的电话号码,如果没有这个字段就新增这个字段
db.user.update({"name":"bac"},{"$set":{"tel":"1234444"}})

db.user.find({"age":{"$lt":20}})
db.user.find({"name":/^abc/i)
db.user.find({"name":/abc/)相当于 like

限制与聚合
limit:限制记录条件
skip:忽略前N条记录
sore:排序 -1(降序) 1(升序)
count:记录数
db.songs.find().count();总的记录数
db.songs.find({"type":"Mp3"}).limit(50).sort({"price":-1})

创建索引
db.user.ensureIndex({"username":1})升序索引
db.user.ensureIndex({"username":1})降序索引

db.user.ensureIndex({"username":1},{"unique":true})
查看与删除索引

db.user.getIndexes() 查看user集合上的索引
db.user.dropIndex(age) 删除user集合上,年龄字段的索引
db.user.dropIndexes() 删除user集合上的所有索引

查看/删除账号
db.system.users.find() 查看
db.system.users.remove({"user":"test"})删除test账户

固定集合是一种尺寸固定的环形的集合,按照顺序一个一个数据插入,当集合数据满了之后,再继续插入会覆盖掉前面的数据,继续掉入
创建固定集合
db.createCollection("name":{capped:true,size:1024,max:100});size:集合的尺寸 ,max集合中最大的记录数

转换普通集合为固定集合
db.runCommand(convertToCapped:"test","size":1000);
自然排序,按插入的顺序排序
db.collection.find().sort({"$natural":1})
db.collection.find().sort({"$natural":-1})相反插入顺序

GridFS基本原理
GridFS是建立在普通文档基本上的轻量级的文件存储规范
1.把打的文件分成很多块,每块作为一个单独的文档存储,这样就可以存储大文件
2.没有碎片
3.支持复制与分片功能
4.使用fs.files和fs.chunks集合存储数据

GridFS用来在mongodb中存储文件,主要使用mongofiles.exe命令来完成文件的上传,下载,删除等功能
mongofiles.exe put test.txt 将test.txt放入mongodb
mongofiles.exe list
mongofiles.exe search filename
mongofiles.exe get filename
mongofiles.exe delete filename
主要是为了实现分布式存储 (文件切分成好几个文件中放在不同的服务器)

高级功能:
分片: 大文件abcd 插入配置管理服务器 第一台服务器存ab 第二台服务器存cd
复制:将主机数据复制到其他机器上,主要用来备份,故障恢复,读扩展(读写分离)等
大文件abcd 主服务器 从服务器存abcd 从服务器存abcd

查看服务器状态
db.runCommand({"serverStatus":1})

hadoop(java写的) 提供了一套机制,可以快速的处理大数据
map(每台服务器要做的工作) reduce(每台服务器上的结果如何汇总成一个结果) + 分布式文件系统
hdfs
大数据

启动主服务器
mongod.exe --master --bind_ip 127.0.0.1 --port 27012 --dbpath 数据目录 --logpath 日志目录
启动从服务器
mongod.exe --slave --source 127.0.0.1:27012 --dbpath 数据目录 --logpath 日志目录

备份与恢复
mongodump -d 要备份的数据库名 -o 输出目录
mongorestore -d 恢复到的数据库名 --drop备份文件目录
实例1:备份test数据库到d:\dk mongodump -d test -o d:\dk
实例2:恢复test数据库倒test1数据库中 mongorestore -d test1 -drop d:\dk

轻松掌握mongodb的更多相关文章

  1. MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB数据

    看到下图,是通过Jqgrid实现表格数据的基本增删查改的操作.表格数据增删改是一般企业应用系统开发的常见功能,不过不同的是这个表格数据来源是非关系型的数据库MongoDB.nosql虽然概念新颖,但是 ...

  2. 在MVC模式下通过Jqgrid表格操作MongoDB数据

    看到下图,是通过Jqgrid实现表格数据的基本增删查改的操作.表格数据增删改是一般企业应用系统开发的常见功能,不过不同的是这个表格数据来源是非关系型的数据库MongoDB.nosql虽然概念新颖,但是 ...

  3. 博客数据库要连接Elasticsearch,使用MySQL还是MongoDB更合理

    若进行博客等文本类数据的读写以及专业搜索引擎的连接的解决方案对比,可以肯定的下结论:MongoDB的解决方案中要远远好于MySQL的解决方案. 一.从开发工序角度 MySQL的文章读写方式 方式一:文 ...

  4. sharedb结合elementUi编写的实时小工具

    我是使用sharedb 作为后端 ,然后前端使用的elementUI样式,编写的一个值班小工具.接下来,让我们先来了解一下sharedb是什么吧? sharedb工具 github地址:https:/ ...

  5. Mongoose轻松搞定MongoDB,不要回调!

    MEAN开发栈中使用MongoDB的时候,与之配对的ORM最好的选择就是Mongoose了.本文就和大家一起探讨一下如何使用Mongoose来实现MongoDB的增删改查. 为了能使文中的例子更加生动 ...

  6. 进程监控工具supervisor 启动Mongodb

    进程监控工具supervisor 启动Mongodb 一什么是supervisor Superviosr是一个UNIX-like系统上的进程监控工具. Supervisor是一个Python开发的cl ...

  7. MongoDB与PostgresQL无责任初步测试

    PostgresQL一秒能插入多少条记录,MongoDB呢?读取的情况又如何?我写了一些简单的程序,得出了一些简单的数据,贴在这里分享,继续往下阅读前请注意下本文标题中的“无责任”,这表示此测试结果不 ...

  8. PHP中的数据库四、mongodb

    h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h ...

  9. MongoDB的安装与设置MongoDB服务

    Mongo DB 是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式备受当前IT从业人员的青睐.Mongo DB很好的实现了面向对象的思想(OO思想),在Mongo DB ...

随机推荐

  1. 剑指offer25:复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),结果返回复制后复杂链表的head。

    1 题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用 ...

  2. dede5.7-修改自定义表单

    最近刚好帮客户做一个网站,需要用到dede的自定义表单功能.可是有个这样的需求,就是当表单提交成功后,要返回一个自定义页面的提示功能!可能是觉得dede自带的提示太low的原因吧!(一不小心又黑了下)

  3. PAT(B) 1049 数列的片段和(C)规律

    题目链接:1049 数列的片段和 (20 point(s)) 题目描述 给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段.例如,给定数列 { 0.1, 0.2, 0.3, 0.4 },我 ...

  4. High load average analyze

    https://www.tummy.com/articles/isolating-heavy-load/ https://www.tecmint.com/understand-linux-load-a ...

  5. 封装函数(累计和、K型、金字塔)

    // 假设有个函数,只要传参数进去,就能统计累加的结果 function test($n){ if($n==1){ return 1; } return $n+test($n-1);}echo tes ...

  6. 修改mysql远程数据库链接密码(转)

    原文:https://blog.csdn.net/jianjiao7869/article/details/81029171 原来root用户有两个,一个只允许localhost登陆,一个可运行所有用 ...

  7. 将网站升级为https并自动续期Https证书。

    Let's Encrypt Let's Encrypt 是一个由Internet Security Research Group (互联网安全研究组)提供的免费,自动化和开放的证书颁发机构. 它秉承着 ...

  8. Oracle数据的导入与导出

    本文针对window操作系统与oracle12C的版本. 1.sqlplus执行单个sql文件 1.执行sqlplus登陆命令:sqlplus username/password@host:port/ ...

  9. Android笔记(十二)AndroidManiFest.xml

    AndroidManiFest.xml清单文件是每个Android项目所必须的,它是整个Android应用的全局描述文件.AndroidManiFest.xml清单文件说明了该应用的名称.所使用的图标 ...

  10. Python基础——__name__变量

    转自:https://blog.csdn.net/u011511601/article/details/53504355 Python使用缩进对齐组织代码的执行,所有没有缩进的代码,都会在载入时自动执 ...