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. Python 容器用法整理

    本文整理几种基本容器:列表.元组.字典和集合的用法和collections中几种已经预先实现的容器数据结构:namedtuple(),双向链表deque,ChainMap,Counter,Ordere ...

  2. 关于使用 symfony 3.4.32中Luckynumber 页面的 route 书写

    关于symfony 3.4.32的安装与配置及第一个页面Luckynumber 的route书写 1.symfony 的安装与配置 symfony官网文档:https://symfony.com/do ...

  3. babel tsc webpack

    我要用啥?js的话:babel编译+webpack模块打包ts的话:tsc编译成js+babel编译+webpack模块打包浏览器情况:如果您的浏览器支持es6所有语法那么就可以只用webpack来处 ...

  4. javascript之instanceof

    定义和用法 instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上. 语法: object instanceof construct ...

  5. java 禁用科学计数法

    禁用科学计数法 Double num = 80000000000.000001; System.out.println("默认计数法:num=" + num); NumberFor ...

  6. Windows终端命令行工具Cmder

    在IT这一行,大部分情况下都是推荐大家使用Linux或者类Unix操作系统去编程,Linux作为一代优秀的操作系统,已经人尽皆知,在IT行业已经成为核心.有条件的大佬都选择了使用mac编程,最优秀的莫 ...

  7. Go context 介绍和使用

    context 上下文管理 context 翻译过来就是上下文管理,主要作用有两个: 控制 goroutine 的超时 保存上下文数据 WithTimeout 通过下面的一个简单的 http 例子进行 ...

  8. Go part 7 反射,反射类型对象,反射值对象

    反射 反射是指在程序运行期间对程序本身进行访问和修改的能力,(程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分,在运行程序时,程序无法获取自身的信息) 支持反射的语言可以在程序编 ...

  9. 今日前端框架Vue学习笔记

    在线网页网址http://xingxunxinxi.com/StudentCourse/first.html代码 界面

  10. SR开启时LOG_MODE必须是normal

    SR开启时LOG_MODE必须是normal 需要一个初始化备份,