MongoDB到底是什么鬼?

最近有太多的同学向我提起MongoDB,想要学习MongoDB,还不知道MongoDB到底是什么鬼,或者说,知道是数据库,知道是文件型数据库,但是不知道怎么来用

那么好,所谓千呼万唤始出来,现在我就拉给你们看:

一.初识MongoDB 之 什么东西都得先从理论入手,你说是不是啊?

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

官方给出了以上的解释,那么综上所述,马德 F U C K ! 有效信息太少了(完全没用)

那么让我来用人类的语言讲述一下MongoDB吧

它和我们使用的关系型数据库最大的区别就是约束性,可以说文件型数据库几乎不存在约束性,理论上没有主外键约束,没有存储的数据类型约束等等

关系型数据库中有一个 "表" 的概念,有 "字段" 的概念,有 "数据条目" 的概念

MongoDB中也同样有以上的概念,但是名称发生了一些变化,严格意义上来说,两者的概念即为相似,但又有些出入,不过无所谓,我们就当是以上概念就好啦

光说的话,还是有点儿模糊,就让我们来做一个小例子,进行一个对比吧

接下来我们先看一下MongoDB的数据结构:

{
"_id" : ObjectId("5bfcf269b990651011d59d00"),
"name" : "chaoge",
"test_list" : [
102,
108,
4,
5
],
"info" : {
"性别" : "男",
"height" : 172,
"weight" : 128
}
}, {
"_id" : ObjectId("5bfcf2f4b990651011d59d01"),
"name" : "chaoge_sb",
"age" : 30
},
{
"_id" : ObjectId("5bfe61c5004e553ad8af92c9"),
"name" : "强哥"
}

上面的格式还可以转化成下面这种样子:

这......这特么不就是字典吗?你说的对,如果你理解成了字典,那么证明了你只会Python,在其他语言中它又是别的类型了,我们把这种类型的玩意儿,叫做:Json

那么你就该恍然大悟了吧,MongoDB的每个表(Collection)中存储的每条数据(Documents)都是一个一个的Json,Json中的每一个字段(Key)我们称之为:Field

就此我们引出了三个关键字,Collection也就是关系型数据库中"表"的概念,Documents就是"数据条目",Field就是"字段"

二.MongoDB安装部署 之 你必须得先安装上数据库才能继续装X

关于MongoDB的安装,真的没有难度,真的真的没有难度,来跟着DragonFire一步一步操作,带你Legendary

首先分享给你一个MongoDB 3.4的msi安装包 点击这里可以下载哦(如果不能下载证明我还没搞定分享msi,自己下载一个吧)

安装完成之后,开始进入配置环节,首先我们要进入目录:

"C:\Program Files\MongoDB\Server\3.4\bin"

带着你配置环境变量,让X装的更加自然更加美:

之后的操作,windows 7 与 windows 10 不太一样,大同小异啦

windows 10 一路到底的"确定"

windows 7 在这里需要注意的是,Path路径移动到最后,输入:"  ;C:\Program Files\MongoDB\Server\3.4\bin  " 一定要带上 "  ;  " 哦

因为没有找到windows 7 操作系统的计算机,所以这里只能给windows 7 的同学说声抱歉了

OK!到了这里我们基本已经完成了部分操作了

我们来试一下成果吧

打开cmd窗口进行一次ZB的操作吧

mongo # 打开服务端
mongod # 打开客户端
MongoDB的默认端口是:27017

那我们来创建一个" C:\data\db\ "的目录吧

mkdir c:\data\db

三.MongoDB操作 之 原生ORM,根本不存在SQL语句

创建数据库:这里和一般的关系型数据库一样,都要先建立一个自己的数据库空间

嗯嗯嗯嗯,我感受到了你内心的惊呼,瞅瞅你们这些没见过世面的样子

是的,MongoDB设计的比较随意,没有就认为你是在创建,use db1是不存在的,所以MongoDB就认为你是要创建并使用

这个概念一定要记清楚哦,MongoDB中如果你使用了不存在的对象,那么就等于你在创建这个对象哦

使用了不存在的对象,就代表创建对象,我们使用这一谬论创建一张表(Collection)试试

看来真的不是谬论,真的成功的创建了一个table的Collection

那么接下来就是在表(Collection)中添加一条数据了,怎么添加呢?

四.MongoDB 之 插入数据(insert     insertOne     insertMany) 之 Collection 点儿出一切操作 之 insert

insert:插入一条或者多条数据,需要带有允许插入多条的参数,这个方法目前官方已经不推荐喽

db.table.insert({"name":"xiaoqiang","age":20})

insertOne: 插入一条数据,官方推荐

db.table.insertOne({"name":"超哥","age":20})

我们可以看出来两种方法的返回值截然不同对吧

insertMany:插入多条数据,无需参数控制,官方推荐

db.table.insertMany({"name":"超哥1","age":20},{"name":"超哥2","age":19})

这就是我们向table中插入了多条数据:

[{
"name":"超哥1",
"age":20
},
{
 "name":"超哥2",
 "age":19
...
}]

五.MongoDB  之  查询数据(find findOne) 之 这里没有findMany

这里不是select,如果你的第一反应是select 证明你关系型数据库没白学

find() 无条件查找:将该表(Collection)中所有的数据一次性返回

db.table.find()

db.table.find({name:"超哥1"}) 条件查找:name等于超哥1的数据,这里会返回多条结果

db.table.find({name:"超哥1"}})

findOne()无条件查找一条数据,默认当前Collection中的第一条数据

db.table.findOne()

findOne({age:20}) : 条件查找一条age等于19的数据,如有多条数据则返回更靠前的数据

db.table.findOne({"age":20})

查询数据的时候,发现了有些数据出现错误了,要修改怎么办呢?

六.MongoDB 之 修改数据(update updateOne updateMany) 之 跟insert一样,不推荐update的写法

update({"name":超哥"},{$set:{"age":20}}):根据条件修改该条数据的内容

把name等于超哥中的age改为21,这里要注意的是({"条件"},{"关键字":{"修改内容"}}),其中如果条件为空,那么将会修改Collection中所有的数据

关于$set关键字的解释就是,本节最后再说,留个悬念

db.table.update({}"name":"超哥"},{$set:{"age":21}})

updateOne({"age":19},{$set:{"name":"超哥1"}}):根据条件修改一条数据的内容,如出现多条,只修改最高前的数据

把age等于19的所有数据中第一条数据的name改为WSSB

db.table.updateOne({"age":19},{$set:{"name":超哥1}})

根据条件修改所有数据的内容,多条修改,把age等于19的所有数据中的name改为超哥3

db.updateMany({"age":19},{$set:{"name":"超哥3"}})

上述中有一个$set的悬念,这个悬念呀,可能要留到再往后一些了

但是$set:{"name":"超哥1"}我还是要解释一下: $set 是update时的关键字,表示我要设置name属性的值为"超哥2"

那么我们之前说过MongoDB的灵活性,没有就代表我要创建,所以说如果该条Documents没有name属性,他就会自动创建一个name属性并且赋值为"超哥2"

更改了半天,我觉得,这些数据我都不想要了,该怎么办呢?

七.MongoDB  之  删除数据(remove) 之 如果你什么都不写,你讲失去全部的生命力

remove({}):无条件删除数据,这里要注意了,这是删除所有数据,清空Collection

当然了,我现在还不会操作,你看到的截图是我全部都写完之后的截图,如果跟着操作的话,那么你实在是太傻了,哈哈哈哈哈哈哈哈

db.table.remove({})

如果你的数据全没了,那么请再练习一次insertMany([{"name":"超哥"}])吧,你多练习一次,总比马上忘记要强吧

remove({"name":"超哥"}) : 条件删除name等于"超哥"的所有Document

db.table.remove({"name":"超哥"})

那么到这里呢,增删改查就已经完事儿了

最新文章

  1. zabbix利用api批量添加item,并且批量配置添加graph
  2. 栈的存储结构和常见操作(c 语言实现)
  3. html5新标签转
  4. 会"说话"的勒索病毒Cerber
  5. ArcEngine9.3报错Create output feature class failed
  6. InitializingBean和init-method
  7. Lua学习笔记(五):面向对象的实现
  8. Python web.py 实例和源码分析:
  9. EventBus(事件总线)
  10. module parameters
  11. 【多重背包模板】poj 1014
  12. oracle linux 6.5 安装 oracle 12cR2数据库(2)-DBCA建库
  13. 数据库学习任务四:数据读取器对象SqlDataReader、数据适配器对象SqlDataAdapter、数据集对象DataSet
  14. apache kafka & CDH kafka源码编译
  15. Laravel框架下容器Container 的依赖注入和反射应用
  16. linux----------今天又遇到一个奇葩的问题,就是linux文件的权限已经是777了但是还是没有写入权限,按照下面的命令就解决了
  17. 【浅色】最强Win7 x64评测
  18. mysql 5.7 配置
  19. Atitit opencv3.0  3.1 3.2 新特性attilax总结
  20. Spring资源加载基础ClassLoader

热门文章

  1. iOS电商类App研发学习总结
  2. 【pod无法删除 总是处于terminate状态】强行删除pod
  3. echars 3.0 去掉柱状图阴影用什么属性
  4. 最新 迅游科技java校招面经 (含整理过的面试题大全)
  5. nginx 配置参数详细说明
  6. eclipse的maven中需要把jar的包文件登入到自己的仓库里面的操作
  7. [SQL SERVER] - 还原数据库备份(SQL脚本),抛出 "System.OutOfMemoryException" 异常之解决
  8. 关于/etc/rc.local
  9. Spyder中代码提示功能添加
  10. php中array_replace,array_splice和str_replace三个函数相互比较