MongoDB(NoSQL) 非关系型数据库
简单了解 mongoDB
# NoSQL 泛指非关系型的数据库
NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,是一项全新的数据库革命性运动,早期就有人提出,
发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,
这一概念无疑是一种全新的思维的注入。
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,
数组及文档数组。
官网:https://www.mongodb.com/
mongoDB 特点
MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。
你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
下载与安装
- 安装流程参考 点击
- 修改数据库存储位置
MongoDB 是一个面向文档存储的数据库,个人电脑安装可以考虑把数据存储到D盘或E盘(非系统盘).
MongoDB 启动 "mongod" #(修改环境变量后,可在命令框直接输入mongod)
- 指定 MongoDB 数据存储目录 --dbpath="d:/data/db"
- 如: C:\mongodb\bin\mongod --dbpath="d:/data/db"
默认监听端口是 MongoDB:27017 | Mysql:3306 | Redis:6379
启动MongoDB服务
- net start MongoDB
关闭MongoDB服务
- net stop MongoDB
移除 MongoDB 服务 (慎用)
- C:\mongodb\bin\mongod.exe --remove
#win10系统 添加环境变量
可视化工具
nosqlbooster 推荐可以自行百度下载(免费)
简单使用mongoDB
MongoDB 启动
mongod 启动MongoDB服务 默认端口 27017
-- 默认数据库文件的存放地址 C:/data/db or /data/db
-- dbpath="D:/data/db"
mongo 启动客户端
-- 默认连接 localhost:27017
MongoDB 指令
1. show databases 查看本地磁盘中的数据库
> show databases
admin 0.000GB
local 0.000GB
2. use databasename 切换当前使用的数据库
> use admin
switched to db admin
# use 不存在的数据库名 即 在内存中创建该数据库 使用了不存在的对象 即 创建该对象
3. db 查看当前使用的数据库
> db
admin
4. db.表名 找到数据库中的某张表
# db.不存在的表名 即 在数据库中创建该表(内存中) 使用了不存在的对象 即 创建该对象
5. show tables 查看当前数据库磁盘中的表
> show tables
system.version
数据操作
1.增
db.tablename.insert({})
db.user.insert({name:"沙悟净",age:66.666,hobby:[1,2,3,4,5]})
db.user.insert([{},{}])
官方推荐写法 in 3.2:
db.user.insertOne({}) 增加一条数据
db.user.insertMany([{},{}]) 批量增加数据
db.tablename.insert({name:123}) 官方认可但不推荐
res = db.tablename.insertOne({name:123}) # 增加一条数据 返回值 inserted_id
res = db.tablename.insertMany([{name:123},{name:456}]) # 增加多条数据 返回值 inserted_ids
2.查询
db.tablename.find({查询条件}) 查询所有符合条件的数据
db.user.find({name:"沙悟净"}) 条件查询
# 并列条件查询 and
db.tablename.find({查询条件1,查询条件2})
db.user.find({name:"沙悟净",age:77}) 并列条件查询
db.tablename.find({查询条件}) # 查询所有符合条件的数据
db.tablename.findOne({查询条件}) # 查询符合条件的第一条数据 返回JSON数据
$数据比较符
# 用法 db.user.find({age:{$gt:70}})
$lt 小于
$lte 小于等于
$gt 大于
$gte 大于等于
$eq 等于 # db.user.find({age:{$gt:70}})等同于 db.user.find({age:70}) (冒号不生效的的情况下可以使用$eq )
$ne 不等于
3.改
db.tablename.update() 修改符合条件的第一条数据
# 所有MongoDB的修改全部基于 修改器
# $修改器 关键字
# $关键字:
db.user.updateOne({name:"钢蛋","stdent.name":"MPy"},{$set:{"stdent.$.name":"Anyway"}})
db.user.updateOne({name:"狗蛋",hobby:"喝酒"},{$set:{"hobby.$":"飙车"}})
$是用来存储符合当前Array条件元素的下标索引
当前Array - ["抽烟","喝酒","上网"]
条件元素 - {hobby:"喝酒"}
当前Array - 第2个元素符合条件 它的下表索引是 1
当前$ 的值就是 1
如果使用".索引"的方式来操作Array "字段.索引位置"
官方推荐
db.user.updateOne({},{}) 修改符合条件的第一条数据
db.user.updateMany({},{}) 修改符合条件的所有数据
$set
db.user.update({age:66.666},{$set:{age:44}})
强制的将某字段值修改
db.user.update({name:"孙大圣"},{$set:{ag18e:18}})
如果该字段不存在即创建该字段并赋值
$unset
db.user.update({name:"孙大圣"},{$unset:{ag18e:1}})
删除字段
$inc
db.user.update({name:"孙大圣"},{$inc:{age:1}})
引用增加 先引用原有数据 在原有数据基础上增加
db.user.update({name:"孙大圣"},{$inc:{age:-1}})
减少
针对 Array List操作
$push == append
db.user.update({name:"孙大圣"},{$push:{hobby:"8"}})
在Array类型中增加数据在最末端增加
$pushAll == extends
db.user.update({name:"孙大圣"},{$pushAll:{hobby:[9,10,11,12]}})
在Array类型中增加数据在最末端增加多条数据
$pull == remove()
db.user.update({name:"孙大圣"},{$pull:{hobby:"8"}})
删除所有符合条件的数据
$pullAll
db.user.update({name:"孙大圣"},{$pushAll:{hobby:[9,10,11,12]}})
遍历删除所有符合条件的数据
$pop ~= pop() 删除Array中第一条或最后一条
db.user.update({name:"孙大圣"},{$pop:{hobby:-1}})
删除第一个数据
db.user.update({name:"孙大圣"},{$pop:{hobby:1}})
删除最后一个数据
'''
db.tablename.update({查询条件},{$修改器:{修改值}}) # 官方认可但不推荐
db.tablename.updateOne({查询条件},{$修改器:{修改值}}) # 修改符合条件的第一条数据
db.tablename.updateMany({查询条件},{$修改器:{修改值}}) # 修改所有符合条件的数据
$修改器 字段:
$set 强制修改 创建字段
$unset 删除字段 {字段:1}
$inc 引用增加 {$inc:{age:1/-1}} 只能增加不能减少
$修改器 Array List
$push == append #追加数据 {$push:{hobby:6}}
$pull == remove #删除元素 {$pull:{hobby:6}}
$pop ~= pop #删除第一个(1)或者最后一个元素(-1) {$pop:{hobby:1/-1}}
$pushAll == extends #追加批量元素 {$pushAll:{hobby:[4,5,6,7]}}
$pullAll # 批量删除元素 {$pullAll:{hobby:[4,5,6,7]}}
'''
4.删除
db.tablename.remove({查询条件}) 删除符合条件的所有数据
db.user.remove({}) 如果条件为空则删除所有数据 危险!
官方推荐的写法:
db.user.deleteOne({}) # 删除符合条件的第一条数据
db.user.deleteMany({}) # 删除所有符合条件的数据 危险! 如果条件为空则删除所有数据
db.tablename.remove({查询条件}) #官方认可但不推荐
db.tablename.deleteOne({查询条件}) # 删除符合条件的第一条数据 _id
db.tablename.deleteMany({查询条件})# 删除所有符合条件的数据
5.选取 跳过 排序
排序
db.user.find({}).sort({age:-1}) 倒序
db.user.find({}).sort({age:1}) 正序
跳过
db.user.find({}).skip(跳过条目) 跳过
选取
db.user.find({}).limit(300) 选取300条数据
如果数据条目小于300 则全部查询
大于300 则只查询300条
db.user.find({}).sort({age:-1}).skip(1).limit(2)
当3个关键全部出现在一条语句中时,逻辑顺序 先排序 - 再跳过 - 最后选取
分页(每页2条数据):
count = 2
page = 1
skip(page-1*count)
db.user.find({}).sort({age:-1}).skip(page-1*count).limit(count)
1 2 0 1
2 2 2 1
3 2 4 1
4 2 6 1
5 2 8 1
数据类型
MongoDB 的数据类型
ObjectID :Documents 自生成的 _id
String: 字符串,必须是utf-8
Boolean:布尔值,true 或者false (这里有坑哦~在我们大Python中 True False 首字母大写)
Integer:整数 (Int32 Int64 你们就知道有个Int就行了,一般我们用Int32)
Double:浮点数 (没有float类型,所有小数都是Double)
Arrays:数组或者列表,多个值存储到一个键 (list哦,大Python中的List哦)
Object:如果你学过Python的话,那么这个概念特别好理解,就是Python中的字典,这个数据类型就是字典
Null:空数据类型 , 一个特殊的概念,None Null
Timestamp:时间戳
Date:存储当前日期或时间unix时间格式 (我们一般不用这个Date类型,时间戳可以秒杀一切时间类型)
MongoDB(NoSQL) 非关系型数据库的更多相关文章
- NoSql非关系型数据库之MongoDB应用(二):安装MongoDB可视化工具
业精于勤,荒于嬉:行成于思,毁于随. 我们上次说到NoSql非关系型数据库之MongoDB应用(一):安装MongoDB服务 这次我们介绍安装 NoSQL Manager for MongoDB 可 ...
- NoSql非关系型数据库之MongoDB应用(三):MongoDB在项目中的初步应用
业精于勤,荒于嬉:行成于思,毁于随. 我们可以结合相关的IDE做一个简单的增删改查了,实现MongoDB在项目中的初步应用. 前提是安装了MongoDB服务和MongoDB可视化工具,没有安装的可以点 ...
- 关系型数据库和nosql非关系型数据库
快下班了.突然和同事聊起了node+mongdb,因为我们这里的项目没有mongdb,就问后端的同事,我们'爱装逼'的后端的同事让我们先自己学习一下什么关系型数据库和非关系型数据库.一顿百度查询了解下 ...
- 如何选择RDBMS关系型数据库和Nosql非关系型数据库?
RDBMS关系型数据库和Nosql非关系型数据库区别: 一.RDBMS是关系型数据库模式: 1.二维模式,由行列组成. 2.非常强调事务原子性,例如用户提出一个请求,DB完整的去执行,如果报错就全部回 ...
- NoSQL非关系型数据库
NoSQL 关注公众号"轻松学编程"了解更多. 一.概念 NoSQL(Not Only SQL)非关系型数据库(功能换效率). 优点 开发维护成本低 访问灵活 访问速度快(缓存+快 ...
- NoSql非关系型数据库之MongoDB应用(一):安装MongoDB服务
业精于勤,荒于嬉:行成于思,毁于随. 一.MongoDB服务下载安装(windows环境安装) 1.进入官网:https://www.mongodb.com/,点击右上角的 Try Free , 2 ...
- 关系型数据库 VS 非关系型数据库
一.关系型数据库? 1.概念 关系型数据库是指采用了关系模型来组织数据的数据库.简单来说,关系模式就是二维表格模型. 主要代表:SQL Server,Oracle,Mysql,PostgreSQL. ...
- 非关系型数据库(NoSql)
最近了解了一点非关系型数据库,刚刚接触,觉得这是一个很好的方向,对于大数据 方面的处理,非关系型数据库能起到至关重要的地位.这里我主要是整理了一些前辈的经验,仅供参考. 关系型数据库的特点 1.关系型 ...
- 大数据时代的数据存储,非关系型数据库MongoDB
在过去的很长一段时间中,关系型数据库(Relational Database Management System)一直是最主流的数据库解决方案,他运用真实世界中事物与关系来解释数据库中抽象的数据架构. ...
随机推荐
- Pandas | 16 聚合
当有了滚动,扩展和ewm对象创建了以后,就有几种方法可以对数据执行聚合. DataFrame应用聚合 可以通过向整个DataFrame传递一个函数来进行聚合,或者通过标准的获取项目方法来选择一个列. ...
- yugabyte 安装pg_hashids 扩展
主要目的比较简单,就是测试下yugabyte 对于pg 扩展的支持,今天在测试plv8的时候发现有问题(以及提交issue了,很期待官方的解决) 所以测试下一个其他的扩展,看看是否像官方介绍的那样 环 ...
- ESP8266 LUA脚本语言开发: 准备工作-动手编译LUA固件
前言 这节咱自己编译LUA固件 准备一台linux的机子 我把固件放到了git上,方便电脑用http下载 我先用这个连接linux 大家随意哈,只要是一台linux的机子就可以,不管是图形页面还是命令 ...
- 洛谷 P5057 [CQOI2006]简单题 题解
P5057 [CQOI2006]简单题 题目描述 有一个 n 个元素的数组,每个元素初始均为 0.有 m 条指令,要么让其中一段连续序列数字反转--0 变 1,1 变 0(操作 1),要么询问某个元素 ...
- 窗体的keyPreview属性
如果把窗体的keyPreview属性设置为true,那么窗体将比其内的控件优先获得键盘事件的激活权.比如Form1和其内的文本框Text1都准备响应keyPress事件,那么以下代码将首先激活窗体的k ...
- 使用CSS隐藏元素滚动条
如何隐藏滚动条,同时仍然可以在任何元素上滚动? 首先,如果需要隐藏滚动条并在内容溢出时显示滚动条,只需要设置overflow:auto样式即可.想要完全隐藏滚动条只需设置overflow:hidden ...
- Servlet 4.0 入门
Java™ Servlet API 是主流服务器端 Java 的基本构建块,也是 Java EE 技术的一部分,例如,用于 Web 服务的 JAX - RS.JSF (JavaServer Faces ...
- Beta/Gamma事后分析
目录 设想和目标 计划 资源 变更管理 设计/实现 测试/发布 团队的角色,管理,合作 总结 对照敏捷开发的原则, 你觉得你们小组做得最好的是哪几个原则? 请列出具体的事例. 照片 设想和目标 我们的 ...
- 本地项目git初始化并提交远程仓库
1.先在远程仓库(如github)创建项目,为了避免错误,不要初始化 README, license, 或者gitignore文件 . 2.打开Terminal终端 3.切换到你的本地项目目录 4.初 ...
- 招聘.net高级工程师
1. 本科及以上学历(必须): 2. 精通.net框架和常见web框架,精通常见设计模式并熟练应用. 3. 扎实的技术功底,有良好的数据结构和算法基础,深入理解面向对象编程思想, 熟悉面向对象的基本设 ...