MongoDB的基本概念及增删改查一系列操作

关于NoSQL数据库

NoSQL数据库:Not only sql,一般指代非关系型数据库,它的优点是高可扩展性,分布式计算,低成本,灵活架构,半结构化数据,简化关联关系;但是相应的,非关系数据库目前没有标准化,不够直观等等

nosql数据库的分类

  • 文档存储

文档型数据库会将数据以文档的形式进行存储,文档是数据库处理信息的基本单位,与传统数据库中的数据段不同,文档可以很长很复杂,一个文档相当于关系数据库中的一条记录。
常见的文档型数据库有MongoDB,CouchDB等

  • 列存储

列式数据库是将数据按照列存储到数据库中,不同于 Oracle、MySQL、SQL Server 等行式数据库,这样做的优点是可以降低系统的IO,适合分布式文件系统
常见的列式数据库有Hbase,Cassandra,Hypertable

  • 键值存储

键值存储,顾名思义是使用key-value的键值对来存储数据,相当于python当中的字典类型。优点是key作为唯一的标识符,查询速度远大于sql,但相应的,无法进行条件过滤,每次查找都是从头到尾遍历数据,会消耗大量的计算资源
常见的键值数据库有BerkeleyDB,Memcache,redis。其中,Redis是最流行的键值型数据库

  • (对象)图存储

图数据库利用的图形理论存储实体之间的关系信息,关系型数据库存储“关系型”数据并不好用,图数据库很好的补充了这部分缺陷
常见的图数据库有Neo4J,Versant

MongoDB简介

MongoDB是一个基于分布式文件存储的NoSQL数据库,是一个C++编写的运行稳定性能高的数据库,也是最像关系型数据库的非关系型数据库

MongoDB基本术语解释

sql术语mongodb术语解释
DBMSDBMS数据库管理系统
DatabaseDatabase数据库
TableCollection数据库表——集合
RowDocument数据记录——文档
ColumnField数据字段——域
IndexIndex索引
Table-joinNone表连接——None
Primary keyPrimary key主键

数据类型

ObiectIDStringBooleanIntegerDoubleArraysObjectNullTimestampDate
文档id字符串布尔值整数浮点数数组或列表嵌入的文档空值时间戳日期时间

常规操作

> show dbs							#显示当前数据系统下的所有数据库
admin   0.000GB
config  0.000GB
dbs     0.000GB
local   0.000GB
> db								#当前用户所在的数据库,如还未进入数据库,显示test
test
> use dbs							#进入到对应数据库
switched to db dbs
> db.help()							#帮助文档
DB methods:
> db.集合名称.insert({})				# 插入文档
> show tables						#显示当前数据库下的所有集合
eletion
hero
> show collections					#显示当前数据库下的所有集合
eletion
hero
> db.dropDatabase					#删除当前数据库
> db.createCollection("CName")		#创建集合
> db.集合名称.drop()					# 删除对应的集合
> db.集合名称.find()					# 查询对应的集合数据

增加数据

插 入 的 集 合 可 以 存 在 可 以 不 存 在 ! \color{red}{插入的集合可以存在可以不存在!}

> db.集合名称.inert({})				#插入文档
> db.集合名称.inert([{},{},{}...])	#插入多条文档		
> db.hero.insert({name:"翠花",age:21})
> db.hero.insert([{name:"翠花",age:21},{name:"flandre",age:22}])
MongoDB 3.0版本后支持
> db.集合名称.insertOne({})			#默认插入一条
> db.集合名称.insertMany([{},{}...])	#默认插入多条

更新数据

> db.集合名称.update(<query>,<update>,[multi:<boolean>])	#将匹配的值重新覆盖
				  匹配条件  修改语句          布尔值					
multi:默认false更新符合条件第一条,设置true全集合更新
> db.hero.update({name:"zhangsan"},{$set:{age:20}})
										# 追加或更新数据,只匹配一条
> db.hero.update({name:"zhangsan"},{$set:{age:20}},{multi:true})
										# 匹配多条
updateOne,updateMany必须加$set,否则会报错
> db.hero.updateOne({name:"zhangsan"},{$set:{age:200}})
> db.hero.updateMany({name:"zhangsan"},{$set:{age:200}})

删除数据

> db.集合名称.remove(<query>,{justOne:<boolean>})		#将匹配的值删除
justOne:设置为true或者1,删除一条;默认false删除多条
deleteOne,deleteMany			# 匹配成功,只删除一个/全部删除

保存数据

db.集合名称.save()				# 如果[_id]数据不存在,添加;不存在则修改
> db.hero.save({name:"flandre"})
> db.hero.save( {"_id" : ObjectId("5fccdc023890083bb925fb5d"),name:"flandre翠花"})
								#mMngoDB是支持中文的

查询数据

  • 查询语句
db.集合名称.find([文档条件])					# 全集合查询
db.集合名称.findOne([文档条件])				# 查询第一个
Pretty()					# 将查询结果格式化展示(只有一个属性时查询结果不变)
> db.hero.find()
> db.hero.find({"name" : "翠花"})
> db.hero.find().pretty()
  • 比较运算符(关系运算符):
$lt:小于
$lte:小于等于
$gt:大于
$gre:大于等于
> db.hero.find({age:{$gte:20}})
  • 逻辑运算符
逻辑与:与运算,默认操作,无运算符     逻辑或:或运算,$or
db.集合名称.find({$or[{条件一},{条件二}]})
> db.hero.find({$or:[{name:"flandre"},{toolname:"tiansha"}]})
  • 范围运算符
$in:判断指定条件是否包含在某个范围内
$nin:
> db.hero.find({age:{$in:[10,20,30,40,50]}})
> db.hero.find({age:{$nin:[10,20,30,40,50]}})
  • 正则表达式
/reg/:普通正则表达式
$regex:指定正则表达式
> db.hero.find({name:/^fl/})						# 以fl开头
> db.hero.find({name:/dre$/})					# 以dre结尾
解决以字符串形式书写正则表达式
> db.hero.find({name:{$regex:"dre$"}})			# 以dre结尾
  • 自定义条件
$where:通过函数一定义条件[JS函数]
指定函数中,返回boolean类型的值
this表示每个要查询的文档
> db.hero.find({$where:function(){return this.name=="flandre"}})
> db.hero.find({$where:function(){return this.name=="xingxing" || this.age==20}})
  • 限制查询条数
<find>.limit(查询条数n)							# 查询前n条
<find>.skip(跳过条数n).limit(查询条数m)			# 跳过n条查询m条
> db.hero.find().limit(5)				
> db.hero.find().skip(3).limit(5)
  • 排序
<find>.sort({字段:1/-1,....})
> db.hero.find().sort({age:1})					# 以年龄正序排序(没有年龄数据的默认最小)
> db.hero.find().sort({age:1,_id:-1})			# 年龄相同的以id号倒序
  • 统计
> db.hero.count({age:{$gt:10}})					# 统计年龄大于10的
> db.hero.count({toolname:"tiansha"})			# 统计toolname是“tiansha”的
> db.hero.count()								# 统计数据条目 
10
  • 去重
db.集合名称.distinct(“去重域名称”,{条件})			# 去掉重复的数据
> db.hero.distinct("name")
  • 投影
投影:查询指定域
find({},{投影字段:1/0})						# 0表示隐藏1表示显示
> db.hero.find({},{name:1})					# 显示所有数据的id
> db.hero.find({},{name:1,_id:0})			# 隐藏id

权限管理

Mongodb默认没有用户,安全性过低,需要创建用户来提高数据库的安全性;mongodb采用角色-用户-数据库的安全管理方式

常用系统角色:
root:只在admin数据库中可用,超级账号,超级权限
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库

打开cmd开启权限认证:关服务(net stop mongodb),mongod --dbpath xxx --logpath xxx auth install,开启服务(net start mongodb) 必 须 使 用 管 理 员 打 开 c m d \color{red}{必须使用管理员打开cmd} 使cmd

  • 创建超级管理员

use admin
db.createUser(
{user:‘root’,pwd:‘root’,
roles:[{role:‘root’,db:‘admin’}]}) #配置管理员授权登录
db.auth(“root”,“root”) # 用户登录

  • 创建普通用户

use dbs
db.createUser(
{user:‘py’,pwd:‘py’,
roles:[{role:‘readWrite’,db:‘dbs’}]}) #配置用户授权登录
db.auth(“py”,“py”) # 用户登录
修改用户
db.updateUser(‘用户名’,{pwd:‘密码’})
删除用户
db.dropUser(username)

用户授权登录
> db.auth("py","py")							# 用户登录

> db.updateUser('用户名',{pwd:'密码'})			# 修改用户

> db.dropUser(username)							# 删除用户
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值