MongoDB学习简记

分类

关系型数据库

高度组织化结构化数据,数据和关系都存储在单独的表中,SQL语言划分成不同的模块语句进行操作
以社交、搜索为代表的互联网业务产生海量数据时,关系型数据库在扩展性(需要负责技术sharding来实现)、高昂的表变更成本、高并发容量、写入延迟等方面都面对很多挑战。

非关系型数据库(No SQL)

Not Only SQL
存储方式有更多的选择:"键-值"对存储,列存储,文档存储,图形数据库等,没有声明性查询语言,没有预定义的模式,非结构化和不可预知的数据,高性能,高可用性和可伸缩性。

贴个大佬链接:从数据结构出发对比关系型数据库和文档型数据库

MongoDB简介

为快速开发互联网web应用而设计

  • 极简、灵活

数据模型面向文档的,即BSON(类似于JSON),就是各种JSON,可以放一些二进制数据

  1. bin目录配置环境
  2. 创建data/db
  3. cmd中打开MongoDB服务器
mongod
mongod -dbpath 路径 -port 端口号
  1. 另一个cmd窗口链接服务器
mongo

要素

要素

  • database 数据库
  • collection 集合
  • documents 文档
    数据库和集合可以在文档创建时自动创建
基本操作
show dbs
show databases	# 展示当前所有数据库
use 数据库名
db # 当前数据库
show collections	# 显示数据库中所有集合
数据库CRUD操作
  • 插入文档
    如果插入时没有指定 ‘_id’ 属性,数据库会自动添加
    自己制定_id需要注意保证唯一性
db.<collection>.insert(doc)
  • 查询
db.<collection>.find()
db.<collection>.find().count()	# 数量
db.<collection>.find({_id:"example"})	# 查询_id那个文档
db.<collection>.findOne()	# 查询符合条件的第一个文档
  • 修改
    $set – 修改文档指定属性
    $unset – 删除指定属性
db.<collection>.update(查询条件, 新对象)	# 注意:默认使用新对象替换就对象
db.<collection>.updateMany(a,b)
db.<collection>.updateOne(a,b)
db.<collection>.replacOne()
db.<collection>.update(查询条件, 
						{$set:{age:28}})	# 仅修改操作符指定
  • 删除文档
db.<collection>.remove({})	# 根据条件删除文档
db.<collection>.deleteOne()
db.<collection>.deleteMany()

文档间的关系

一对一
  • 夫妻
    内嵌文档
一对多
  • 父子
    简单举例就是,在多个文档中用一个属性去对应单个文档
people
[{name:'Liming', age:40}]
children
[{name:'Limi', father:'Liming'}
{name:'Lilei', father:'Liming'}
{name:'Wangge', father:'Wanglaoji'}]
两个孩子找父亲
father_name = db.people.findOne({name:'Liming'}).name
db.children.find({father:father_name})
多对多

分类与商品
上面的例子也可以用
Liming离婚了,又有了小孩
Limi和Lilei变成了fathers

[
{name:'Liming', age:40},
{name:'Wanglaoji', age:45}]

[
{name:'Limi', fathers:['Liming', 'Wanglaoji']}
{name:'Lilei', fathers:['Liming', 'Wanglaoji']}
{name:'Wangge', father:'Wanglaoji'}
{name:'Lili', father:'Liming'}]

看着有点纠结~~~~

排序、投影

sort 指定文档排序的规则

  • 1升序;-1降序
    limit,skip,sort可以以任意顺序调用
# 按sal的升序排列
db.<collection>.find({}).sort({sal:1})
# 投影,1显示,0消失
db.<collection>.find({},{name:1, _id:0})

mongoose

对象文档模型(ODM)库,对Node原生的MOngoDB进行优化封装,提供更多功能,简单来说,就是用对象的方式操作数据库

  • 为文档创建一个约束,比如字段、数据类型等
  • 对模型的对象\文档进行验证
新的对象

按顺序创建

  • Schema(模式对象),定义了数据库的文档结构
  • Model,对应数据库的集合
  • Document

一些实际操作

内嵌文档

文档的属性值是一个文档

db.users.update({username:'swk'}, 
{$set:{hobby:{citys:['shanxi','sichaun'], 
			  food:['xiangjiao','苹果']}
	   }
})

内嵌文档
支持通过内嵌文档的属性进行查询,但属性名必须加引号

// 查询喜欢食物有苹果的人
db.users.find({"hobby.food":"苹果"})


加入新的食物

// $push,数组加入新元素
// $addToSet 也行
db.users.update({username:'swk'}, {$push:{"hobby.food":"橘子"}})

$push,数组加入新元素
**

大数量

先放入arr数组,后插入数据库

var arr=[]
for(var i=1;i<=100;i++){
    arr.push({num:i})
}

db.numbers.insert(arr)

在这里插入图片描述

(更新ing)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值