zoukankan      html  css  js  c++  java
  • 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:mongodbinmongod --dbpath="d:/data/db" 
                
    默认监听端口是 MongoDB:27017  |  Mysql:3306  | Redis:6379
      
    启动MongoDB服务
    - net start MongoDB
    
    关闭MongoDB服务
    - net stop MongoDB
    
    移除 MongoDB 服务 (慎用)
    - C:mongodbinmongod.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类型,时间戳可以秒杀一切时间类型)
    
    作 者:郭楷丰
    声援博主:如果您觉得文章对您有帮助,可以点击文章右下角 推荐一下。您的鼓励是博主的最大动力!
    自 勉:生活,需要追求;梦想,需要坚持;生命,需要珍惜;但人生的路上,更需要坚强。带着感恩的心启程,学会爱,爱父母,爱自己,爱朋友,爱他人。
  • 相关阅读:
    映射文件中增删改查标签中的parameterType和resultType
    占位符#{}和拼接符${}
    mybatis与hibernate不同(重要)
    Mybatis解决jdbc编程的问题
    mybatis框架入门程序:演示通过mybatis实现数据库的修改操作
    mybatis框架入门程序:演示通过mybatis实现数据库的删除操作
    mybatis框架入门程序:演示通过mybatis实现数据库的插入操作中实现返回结果的获取
    mybatis框架入门程序:演示通过mybatis实现数据库的添加操作
    mybatis框架入门程序:演示通过mybatis实现数据库的模糊查询操作
    1047B_Cover Points
  • 原文地址:https://www.cnblogs.com/guokaifeng/p/11662408.html
Copyright © 2011-2022 走看看