1.概念
是一个基于分布式文件存储的数据库,也是非关系型数据库,Nosql数据库(不支持数据库语言sql)
2.结构
database 数据库
collection 数据库表/集合
document 数据记录行/文档
filed 数据字段/域
index 索引
- mangoDB不支持表连接, primary key 主键,MongoDB自动将_id字段设置为主键
- mysql > database > table > state / data
- MongoDB > database > collection > document / data
3.命令
1.查看数据库 show dbs <==> show databases
新建的数据库,没有数据的时候不会展示。需要向其中插入数据
2.切换数据库 use db_name
如果数据库不存在,则创建数据库,并切换到这个数据库,如果数据库存在就切换到指定数据库
3. db 查看当前在那个数据库下
4. db.dropDatabase() 删除当前使用数据库的方法 show dbs能显示的就能删除
4.集合的操作(collection)
1.创建集合 db.createCollection(name : string,[options:object])
2.查看集合 show collections === show tables
3.删除集合 db.collection_name.drop();
不管集合也好 数据库都是一个容器罢了,后期使用语言操作的额是时候这两种操作将会被淡化
5.文档操作(document)
5.1 插入数据
db.collection_name.insert({}) || db.collection_name.insert([{},{},{},{}])
插入单行
db.collection_name.insertOne()
插入多行
db.collection_name.insertMany([{},{},{},{}])
注意: mongoDB插入的内容会增加col 以多的那条决定结构
5.2 查看数据
5.2.1 普通查看 db.collection_name.find()
5.2.2 过滤查询 db.collection_name.find({})
`> db.students.find({age:"18",gender:"女"})
{ "_id" : ObjectId("63bd267038097bd03477af40"), "name" : "张三", "age" : "18", "gender" : "女", "class" : "cdw101" }
{ "_id" : ObjectId("63bd278f38097bd03477af45"), "name" : "张奇迹", "age" : "18", "gender" : "女", "class" : "cdw102" }
{ "_id" : ObjectId("63bd289938097bd03477af47"), "name" : "李明星", "age" : "18", "gender" : "女", "class" : "cdw102" } `
5.2.3 易读查询(有结构) db.collection_name.find({}).pretty()
`db.students.find({name:"张三"}).pretty()
{
"_id" : ObjectId("63bd267038097bd03477af40"),
"name" : "张三",
"age" : "18",
"gender" : "女",
"class" : "cdw101"
} `
5.2.4 只读一条 db.collection_name.findOne()
5.3 更新数据
db.collection_name.update({匹配条件},{$set:{修改的选项}})
` db.admins.update({name:"毛子韬"},{$set:{passwd:"1230"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) `
加不加$set区别
加$set就是单纯的修改
不加就是用新的值覆盖所有原来的值(id不覆盖)
5.4 删除数据
db.collection_name.remove({匹配条件})
` db.admins.remove({passwd:"1230"})
WriteResult({ "nRemoved" : 1 })
`
6.操作符
6.1 条件操作符
$or 或关系
$nor 或关系取反
$gt 大于
$gte 大于等于
$lt 小于
$lte 小于等于
$ne 不等于
$in 在多个值范围内
$nin 不在多个值范围内
$all 匹配数组中多个值
$regex 正则,用于模糊查询
$size 匹配数组大小
$maxDistance 范围查询,距离(基于LBS)
$mod 取模运算
$near 邻域查询,查询附近的位置(基于LBS)
$exists 字段是否存在
$elemMatch 匹配内数组内的元素
$within 范围查询(基于LBS)
$box 范围查询,矩形范围(基于LBS)
$center 范围醒询,圆形范围(基于LBS)
$centerSphere 范围查询,球形范围(基于LBS)
$slice 查询字段集合中的元素(比如从第几个之后,第N到第M个元素
db.girls.find({age:{lt:30},money:{gte:8000}})
6.2 过滤操作符
and => ,
or => $or => [{},{}]
db.students.find({$or:[{age:{$lt:20}},{gender:"女"}]}).pretty()
db.students.find().limit(pageSize).skip((index-1)*pageSize)
正则
db.students.find({passwd:{$regex:"^[0-9a-z]{6,10}$",$options:"$i"}})
db.students.find({passwd:{$regex:/^[0-9a-z]{6,10}$/i}})
7.聚合
db.students.aggregate(options)
options:
$sum $avg $min $max $push $addToSet $first $last
例子:
`db.students.aggregate([{$group:{_id : "$age", age : {$sum : 1}}}])
{ "_id" : 19, "age" : 1 }
{ "_id" : 22, "age" : 2 }
{ "_id" : 21, "age" : 3 }
{ "_id" : 17, "age" : 1 }
{ "_id" : 18, "age" : 2 }
{ "_id" : 20, "age" : 1 }
{ "_id" : null, "age" : 1 } `
MongoDB 中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似 SQL 语句中的 count(*)。
注意:使用时需要保证是数值
8.关系
嵌入式和引用式
1 : 1 你跟你的身份证号
1 : n 你跟你的手机
n : m 闸机与乘客的关系
学生在第几宿舍 存宿舍的_id ObjectId(adsadsad)
1.需要得到学生中的班级id 需要得到的是对象 只能用 findOne 可以用变量接收
var result = db.students.findOne({},{_id:0,class:1})
2.通过第一部的结果作为我第二次查询的条件 他在班级当中的信息
db.class.find({_id:{$in:result[class]}})
案例
var result = db.students.findOne({name:"张三"},{_id:0,class:1})
db.class.find({_id:{$in:result[class]}})