首次体验MangoDB
Author:SimpleWu
MongoDB官方网:https://www.mongodb.com/
MongoDB中文网:http://www.mongodb.org.cn/
什么是MongoDB?
NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。
NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
而MongoDB就不仅仅是SQL。
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库(nosql)之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
MongoDB概念
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
MongoDB安装
官方下载网站:https://www.mongodb.com/download-center/community,支持N多平台操作系统。
我们这里下载MongoDB的3.4,windows64位操作系统的解压包,ZIP是绿色版,MSI是安装版。
安装一路next就成。
4个文件是协议不需要管,bin目录里面的是可执行文件,但是这个时候我们是无法使用mongodb的,我们还是要将它添加到环境变量中。
创建一个MongoDB_HOME=D:\JAVA\mongodb,然后在将%MongoDB_HOME%\bin加入到path目录
这个时候我们运行cmd打开小黑屋运行命名:mongod,这个时候运行是失败的:
错误原因是:c:data\db\这个目录不存在,最简单的办法就是创建一个,不过个人不喜欢把文件放在C盘,并且以这种方式启动会一直有个窗口感觉非常不爽。
在服务中运行:
我们首先在mongoDB安装后的bin目录里创建一个mongod.cfg,里面添加如下内容
systemLog:
destination: file
path: D:\JAVA\mongodb\log\mongodb.log #如果没有目录必须要创建
storage:
dbPath: D:\JAVA\mongodb\db\ #如果没有目录必须要创建
使用mongod --config "D:\JAVA\mongodb\bin\mongod.cfg" –install --serviceName "MongoDB" 安装服务,需要管理员权限。
芒果DB服务命令:
net start MongoDB #启动服务
net stop MongoDB #关闭服务
mongod –remove #移除服务(需要管理员权限。)
sc delete MongoDB 删除服务
我们使用命令之后这个时候我们的服务中会有个MongoDB服务并且在运行中。
这个时候我们就可以使用命令mongo连接上我们的数据库。
附上一张mongoDB参数列表图:
使用MongoDB的时候如果不喜欢黑窗口的可以去度娘问问gui界面。
数据库指令
/*查看当前数据库*/
show dbs;
/* 如果数据库不存在,则创建数据库,否则切换到指定数据库。
注意:这里的数据库并不是一定要存在的,如果不存在,在创建文档时会自动创建。
*/
use MyDB;
/*删除当前数据*/
MyDB.dropDatabase();
/*显示当前所在数据*/
db;
集合操作指令
查看当前所有集合: show collections;
创建集合语法: db.createCollection(name,options)
name:集合的名称,options:可选参数,指定有关内存大小及索引的选项。
删除集合语法:db.集合名.drop()
常用命令操作
Employee是我创建的一个集合
插入一条文档:
db.Employee.insertOne({name:"SimpleWu",Email:"lovelyWu@gmail.com",QQ:450255266});
插入多条文档:
db.Employee.insertMany([
{
name:"李白",
Email:"libai@gmail.com",
QQ:123456789
},
{
name:"韩信",
Email:"hanxin@gmail.com",
QQ:987654231
}
]);
插入一条文档或插入多条文档:
db.Employee.insert({name:"武则天",Email:"wuzetian@gmail.con",QQ:1111111});
db.Employee.insert([
{
name:"嬴政",
Email:"yingzheng@gmail.com",
QQ:555555
},
{
name:"安琪拉",
Email:"anqila@gmail.com",
QQ:66666
}
])
批量插入文档:
for(var i = 0 ; i <= 50000 ; i ++ ){
db.Employee2.insert({num:"鲁班" + i + "号"});
}
注意我们这样插入文档50000条数据花费了将近20秒这是非常残酷的,我而我们可以这样优化,优化后只需要0.5秒。
var array = [];
for(var i = 0;i<=50000;i++){
array.push({num:"鲁班"+ i +"号"});
}
db.Employee2.insert(array);
查询文档:
db.Employee.find();
注意:如果在插入时,不指定_id属性,则数据库会自动生成一个_id,取值为ObjectId()。如果指定了_id,则不会生成。
更新文档语法:
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。writeConcern :可选,抛出异常的级别。
update默认会用update的对象替换原有对象:
db.Employee.update({name:"李白"},{name:"李小白"});
如果想修改指定的属性,而不是修改所有内容,则要使用修改操作符。 $set可以用来修改指定属性
db.Employee.update({name:"李小白"},{$set:{name:"李白"}});
$unset可以移除某个属性,移除属性的值可以随便填
db.Employee.update({name:"武则天"},{$unset:{QQ:""}});
如果匹配到多个,update也只会删除一条记录。要删除多条,需要使用multi属性
db.Employee.update({name:"SimpleWu"},{$set:{name:"LovelyWu"}},{mluti:true});
save() 方法通过传入的文档来替换已有文档。语法格式如下:
db.collection.save(
<document>,
{
writeConcern: <document>
}
)
document : 文档数据。 writeConcern :可选,抛出异常的级别。
注意:若新增数据的主键已经存在,则会对当前已经存在的数据进行修改操作。
插入:
db.Employee.save({name:"SimpleWu",gender:"男",email:"lovelyWu98k@gmail.com"});
/*
_id存在变成更新操作
*/
db.Employee.save({ _id:ObjectId("5bf7b8cde756c09cc38dd79f"),name:"Wu帅帅",gender:"男",email:"lovelyWu98k@gmail.com"});
删除文档语法remove() 方法:
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
- query :(可选)删除的文档的条件。
- justOne : (可选)如果设为 true 或 1,则只删除一个文档。
- writeConcern :(可选)抛出异常的级别。
db.Employee.remove({gender:"男"});//删除所有符合条件的文档
db.Employee.remove({gender:"男"},{justOne:true});//删除一条
db.Employee.remove();//删除集合中所有文档
查询文档:
db.collection.find(query, projection)
参数说明query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:db.col.find().pretty()
db.Employee.find({name:"SimpleWu"},{gender:0});//查询name是SimpleWu的文档数据,排除gender显示
db.Employee.find({name:"SimpleWu"},{gender:1});//查询name是SimpleWu的文档数据,只显示gender
注意这个0代表的就是排除,1代表的是要它不要其他的,在这里0和1不能混合使用
在这里需要注意不管是不是只显示gender反正我们的_id是特殊的一列,所以我们没有排除_id它绝对会显示出来
那么我们只要显示gender:1怎么办呢很简单在加个_id=1,但是上面不是说不能0和1混合使用吗?
在mongoDB中,主键是特殊的一个字段
条件运算符:
等值判断 $eq:
db.Employee.find({name:"SimpleWu"});
db.Employee.find({name:{$eq:"SimpleWu"}});
判断小于$lt:
db.Employee.find({QQ:{$lt:450255266}});
判断大于$gt:
db.Employee.find({QQ:{$gt:450255266}});
判断小于等于$elt:
db.Employee.find({QQ:{$elt:450255266}});
判断大于等于egt:
db.Employee.find({QQ:{$egt:450255266}});
与条件判断:
//判断name=SimpleWu 同时gender=男
db.Employee.find({name:"SimpleWu",gender:"男"});
或条件判断:
db.Employee.find({$or:[{name:"武则天"},{name:"SimpleWu"}]});
学习某一项技术首先查询官方文档,官方文档是最全的,并且跟着官方文档走可以让我们少掉进许多坑。
总结:
文档是Mongodb中的最基本数据单元,类似于关系数据库中的行。
在mongodb中,文档的键通常都是字符串。Mongodb对文档的键是区分大小写的,对键值是区分数据类型的
MongoDB的文件存储格式为BSON,同JSON一样支持往其它文档对象和数组中再插入文档对象和数组,同时扩展了JSON的数据类型.与数据库打交 道的那些应用。
MongoDB文档的字段非常灵活
首次体验MangoDB的更多相关文章
- Hexo初体验
title: Hexo初体验 date: 2018-05-10 tags: Hexo categories: Hexo --- Hexo本地安装 Node.js安装 Hexo npm安装如下 npm ...
- 分享:使用 TypeScript 编写的 JavaScript 游戏代码
<上篇博客>我写出了我一直期望的 JavaScript 大型程序的开发模式,以及 TS(TypeScript) 的一些优势.博客完成之后,我又花了一天时间试用 TS,用它来重构之前编写的一 ...
- Microsoft Message Analyzer (微软消息分析器,“网络抓包工具 - Network Monitor”的替代品)官方正式版现已发布
来自官方日志的喜悦 被誉为全新开始的消息分析器时代,由MMA为您开启,博客原文写的很激动,大家可以点击这里浏览:http://blogs.technet.com/b/messageanalyzer/a ...
- 关于VR技术和未来发展---转
原文地址:http://mp.weixin.qq.com/s?__biz=MzA4MTIwNTczMQ==&mid=2651345594&idx=3&sn=2741ab7321 ...
- 【初识——最大流】 hdu 1532 Drainage Ditches(最大流) USACO 93
最大流首次体验感受—— 什么是最大流呢? 从一个出发点(源点),走到一个目标点(汇点),途中可以经过若干条路,每条路有一个权值,表示这条路可以通过的最大流量. 最大流就是从源点到汇点,可以通过的最大流 ...
- Hexo博客搭建图文教程
准备 你需要准备好以下软件: Node.js环境 Git Windows 配置Node.js环境 下载Node.js安装文件: Windows Installer 32-bit Windows Ins ...
- ui原则
http://www.niushe.com/news/show-3683.html 设计师Joshua Porter发表了一篇文章——<Principles of User Interface ...
- Microsoft Message Analyzer (微软消息分析器,“网络抓包工具 - Network Monitor”的替代品)官方正式版现已发布
Microsoft Message Analyzer (微软消息分析器,“网络抓包工具 - Network Monitor”的替代品)官方正式版现已发布 来自官方日志的喜悦 被誉为全新开始的消息分析器 ...
- 3rd-Bing Dict使用分析
英语学习APP的案例分析 0x00 写在前面 我们生活中很多时候要和软件打交道,大家上课开小差时候玩的手机游戏,买火车票的网站,互相联系用的微信.QQ,等等都是软件,都很值得分析.你为何成为它们的用户 ...
随机推荐
- element-ui的tabs默认选中页签
Element-UI提供了tabs组件(选项卡.多页签),其中在tabs的属性中提供了一个value/v-model属性来绑定默认选中的页签. 我们通过简单的示例来看一下具体是怎么使用的. <t ...
- Caused by: java.lang.ClassNotFoundException: org.springframework.data.repository.config.BootstrapMode
1.起因,启动SpringBoot2.0的时候报了这个错误.说找不到类,咱也是刚学SpringBoot2.0,咱也不懂,咱也不知道问谁,研究一翻,找不到原因就百度了. 参考链接:https://blo ...
- Winform中对DevExpress的RadopGroup的Description、Value、Tag、Text的理解与使用
场景 Winform中实现读取xml配置文件并动态配置ZedGraph的RadioGroup的选项: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article ...
- ASP.NET MVC EF 连接数据库(一)-----Database First
database first (VS2015 ,Sql Server2014) 1,新建MVC项目 实例: 源码代码:http://note.youdao.com/noteshare?id=1fd ...
- asp.net发布后其他电脑部署——未能加载文件或程序集 System.Web.Mvc, Version=2.0.0.0, Culture=neutral,
本机测试及发布使用正常 在项目中添加了引用但相关dll文件未在bin文件夹中 导致发布后部署其他电脑未能加载程序集 网上说要下载相关内容在部署服务器安装 但怕在服务器安装出现其他问题 所以在项目中重新 ...
- 打印X
***.....***// .***...***.// ..***.***..// ...*****...// ....***....// ...*****...// ...
- python numba讲解
目录 一:什么是numba 二:如何使用numba 由于python有动态解释性语言的特性,跑起代码来相比java.c++要慢很多,尤其在做科学计算的时候,十亿百亿级别的运算,让python的这种 ...
- HttpHelper之我见
前几月一直用一个Http的访问类去调用WebApi,说句实话最开始没觉有什么,一是技术老,二是觉得比较简单,但是最近我一直关注云开发和AI这块儿微软技术,看到云平台调用API大多类似,所以回想这个早年 ...
- memory一致性模型
https://homes.cs.washington.edu/~bornholt/post/memory-models.html https://www.cs.cmu.edu/afs/cs/acad ...
- ptrace函数深入分析
ptrace函数:进程跟踪. 形式:#include<sys/ptrace.h> Int ptrace(int request,int pid,int addr,int data); 概述 ...