轻松掌握mongodb
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的更多相关文章
- MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB数据
看到下图,是通过Jqgrid实现表格数据的基本增删查改的操作.表格数据增删改是一般企业应用系统开发的常见功能,不过不同的是这个表格数据来源是非关系型的数据库MongoDB.nosql虽然概念新颖,但是 ...
- 在MVC模式下通过Jqgrid表格操作MongoDB数据
看到下图,是通过Jqgrid实现表格数据的基本增删查改的操作.表格数据增删改是一般企业应用系统开发的常见功能,不过不同的是这个表格数据来源是非关系型的数据库MongoDB.nosql虽然概念新颖,但是 ...
- 博客数据库要连接Elasticsearch,使用MySQL还是MongoDB更合理
若进行博客等文本类数据的读写以及专业搜索引擎的连接的解决方案对比,可以肯定的下结论:MongoDB的解决方案中要远远好于MySQL的解决方案. 一.从开发工序角度 MySQL的文章读写方式 方式一:文 ...
- sharedb结合elementUi编写的实时小工具
我是使用sharedb 作为后端 ,然后前端使用的elementUI样式,编写的一个值班小工具.接下来,让我们先来了解一下sharedb是什么吧? sharedb工具 github地址:https:/ ...
- Mongoose轻松搞定MongoDB,不要回调!
MEAN开发栈中使用MongoDB的时候,与之配对的ORM最好的选择就是Mongoose了.本文就和大家一起探讨一下如何使用Mongoose来实现MongoDB的增删改查. 为了能使文中的例子更加生动 ...
- 进程监控工具supervisor 启动Mongodb
进程监控工具supervisor 启动Mongodb 一什么是supervisor Superviosr是一个UNIX-like系统上的进程监控工具. Supervisor是一个Python开发的cl ...
- MongoDB与PostgresQL无责任初步测试
PostgresQL一秒能插入多少条记录,MongoDB呢?读取的情况又如何?我写了一些简单的程序,得出了一些简单的数据,贴在这里分享,继续往下阅读前请注意下本文标题中的“无责任”,这表示此测试结果不 ...
- PHP中的数据库四、mongodb
h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h ...
- MongoDB的安装与设置MongoDB服务
Mongo DB 是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式备受当前IT从业人员的青睐.Mongo DB很好的实现了面向对象的思想(OO思想),在Mongo DB ...
随机推荐
- Android--Fragment嵌套的问题
项目中遇到Fragment嵌套应用的问题 子Fragment中要用getChildFragmentManager()方法获取FragmentManager,否则会出问题!
- PowerBuilder学习笔记之2PowerScript语言(二)
z教材地址:https://wenku.baidu.com/view/1e82d26925c52cc58ad6be05.html?sxts=1565679996440 2.4数组 声明数组:Integ ...
- session和cookie有什么区别?
1.存储位置不同 cookie的数据信息存放在客户端浏览器上. session的数据信息存放在服务器上. 2.存储容量不同 单个cookie保存的数据<=4KB,一个站点最多保存20个Cooki ...
- shellexecute的使用和X64判断
bool RunConsoleAsAdmin(std::string appPath, std::string param, bool wait) { LOG_INFO << " ...
- 伪静态 net-IIS伪静态配置,使用URLRewriter实现伪静态
https://www.cnblogs.com/zhenzaizai/p/10364343.html 前段时间开发公司官网,用到了URLRewriter实现伪静态,在VS调试模式下没有任何问题,部署到 ...
- threejs CameraHelper 查看照相机的观察范围
简单例子 这个例子,是在一个视图中,看到照相机的辅助线,也就是,一个照相机的观察访问 这样,就需要两个照相机,一个是主照相机,一个是加有辅助线的照相机(有两种,正交和透视,这里辅助的使用的是正交的) ...
- Dijkstra算法正确性证明
问题:求图中点1到其他各点的最短距离 策略: 1.把起点1放入初始集合Set中,从剩余的点中,选取到Set(此时Set中只有1个点)距离最近的点,并入集合Set中, 2.从剩余的点中,找经过集合Set ...
- Android Studio 生成 keystore 签名文件
Android Studio 生成 keystore 签名文件 常见 SSL 证书格式 : .DER .CER,文件是二进制格式,只保存证书,不保存私钥. .PEM,一般是文本格式,可保存证书,可保存 ...
- javascript原型原型链 学习随笔
理解原型和原型链.需从构造函数.__proto__属性(IE11以下这个属性是undefined,请使用chrome调试).prototype属性入手. JS内置的好多函数,这些函数又被叫做构造函数. ...
- cdh-hbase用户无法执行命令