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. [C++] 非递归实现前中后序遍历二叉树

    目录 前置技能 需求描述 binarytree.h 具体实现 binarytree.cpp main.cpp 网上代码一搜一大片,大同小异咯. 书上的函数实现代码甚至更胜一筹,而且抄一遍就能用,唯一问 ...

  2. HCIA SWITCHING&ROUTTING 笔记——第一章 TCP/IP基础知识(2)

    视频地址:https://ilearningx.huawei.com/courses/course-v1:HuaweiX+EBGTC00000336+Self-paced/courseware/abb ...

  3. AVR单片机教程——点亮第一个LED

    做了这么多准备,我们终于可以开始用开发板做点事了. 单片机编程与计算机编程有一些不同点.程序都要有零个或多个输入.一个或多个输出,这是两者都有的,但是计算机编程的输入输出主要靠控制台,而单片机没有. ...

  4. 数据结构-链式栈c++

    栈的最基本特点先进后出,本文简单介绍一下用c++写的链式栈 头文件 #ifndef LINKEDSTACK_H #define LINKEDSTACK_H template<class T> ...

  5. Python开发【第二章】:模块和运算符

    一.模块初识: Python有大量的模块,从而使得开发Python程序非常简洁.类库有包括三中: Python内部提供的模块 业内开源的模块 程序员自己开发的模块 1.Python内部提供一个 sys ...

  6. WPF GridView动态添加项并读取数据

    假设数据库有如下表, 首先我们创建一个WPF工程,界面如下 <Window x:Class="WpfApplication2.MainWindow" xmlns=" ...

  7. <a>的javascript+jquery编程实例之删除(定位节点与事件绑定)

    相关jquery方法 parent(), remove() //上传图片 article_create.js article_edit.js function uploadAttachment() { ...

  8. javascript获取url参数的方式

     方式一: 推荐使用此方式: url链接为:newsDetail.html?id=8a8080e35f90d9fd015f90dac7750001&modelId=123456 var URL ...

  9. vs2015工程转化为vs2010

    转换的步骤如下: (1)将工程是.sln用记事本打开后,更换以下信息如下:   Microsoft Visual Studio Solution File, Format Version 11.00 ...

  10. sql For xml path('') 备忘

    sql 合并行使用的两个函数记录: SELECT CityName,STUFF((SELECT ',' + UserName FROM table1 subTitle WHERE CityName=A ...