关系型数据库与mongodb的对比:
database database 数据库
table collection 数据库表/集合
row document 数据库记录行/文档
column field 列/字段
关于数据库的相关命令
db
#查看当前数据库名称
show dbs
#查看当前数据库的名称,物理意义上存在的数据库
use 数据库名字
#切换数据库
#如果切换的数据库不存在也不会直接进行创建,只有数据库中插入数据了,才算真正的创建成功。
db.dropDatabase()
#删除当前数据库,但是如果数据库不存在,不会做任何操作
数据库集合的相关命令
db.createCollection(集合名)
show collections
db.集合名.drop
数据库支持的数据类型
objectID 文档的ID
string 字符串,最常用的
boolean 布尔值,true false
integer 整数
double 浮点数
arrays 数组或者列表,将多个值对应存储到一条数据
object 用于存储的文档
null 存储null
timestamp 时间戳
date 存储当前时间的
插入数据
db.集合名称.insert()
注意点:
1、集合的名称可以不创建,因为使用的过程中,直接创建
2、insert()如果id重名,不能插入数据,id是objectid
标注的是唯一的物理位置
3、插入数据的过程中,id可以不指定,由MongoDB直接分配唯一值,id的值也可以自己指定,但是命名要写下划线
更新数据
db.集合名称.update(
查询条件{定位到指定的数据,where},
更新操作,
是否将符合条件的数据全部更新
)
参数1:query 查询条件,类似mysql中的where,起到定位筛选的作用
参数2:update 更新的数据以及更新操作符
参数3:multi 默认值是false,表示只更新符合条件的第一条数据,如果想多条符合条件的数据,需要设置成true
全文档更新
删除数据
db.集合名.remove(
筛选条件,
{
justOne:false
}
)
注意点:
1、justOne这个参数,默认值是false,默认删除多条数据,如果希望删除一条数据,就将它设置为true
2、删除全部内容:db.集合名.remove({})
查询数据
find()
db.集合名.find(查询条件) #查找所有数据
db.集合名.find(查询条件).pretty() #pretty是格式化数据
findOne()
db.集合名.findOne() #查询符合条件的第一条数据,展示出来
比较运算符
等于 {字段:数值}
不等于 {字段:{$ne:值}}
大于 {字段:{$gt:值}}
大于等于 {字段:{$gte:值}}
小于 {字段:{$lt:值}}
小于等于 {字段:{$lte:值}}
逻辑运算符
db.films.find(
{$or:
[{actor:'张国荣'},{name:'花木兰'},{age:{$gt:18}}],
name:'张一毛'
}
)
and 是默认值
not 是等于条件外面再嵌套一层$not
支持正则
db.films.find({name:{$regex:'^张'}})
db.films.find({name:/^张/})
范围查找
db.films.find({$or:[{age:18},{age:20}]})
db.films.find({age:{$in:[18,20]}}) #查找这个两个值
db.films.find({age:{$nin:[18,20]}}) #不在这个范围查找
db.films.find({age:{$gt:18,$lt:28}})#想当于between
投影
类似mysql select 字段1,自断2.....from表名
注意点:
1、在find()函数中,第二个参数是表示需要展示的字段
2、如果需要展示,将这个字段的值设置为1,不设置则代表的是不显示
3、_id默认是显示的,如果需要不展示,需要设置为_id:0
统计个数
db.films.find().count()
db.films.find({age:{$gt:18}}).count()
db.films.count()
db.films.count({age:{$gt:18}})
注意点:
1、db.集合名.count({条件})
2、db.集合名.find().count()
指定读取的文档的数目和位置
db.films.find().limit(4)
db.films.find().limit()
db.films.find).skip(2)
注意点:
1、limit的参数如果不写,说明展示的是当前结合中所有的文档
2、limit的参数指定,说明需要展示的具体数目
3、skip表示的是越过多少条数目,默认是0
聚合函数
db.films.distinct('name')
db.films.distinct('name',{age:{$gr:18}})
注意点:
1、第一个是去重的的字段名
2、第二个参数是筛选条件
#得到男女性别各有多少人以及平均年龄
db.actors.aggregate([{$group:{_id:'$gender',count:{$sum:1},avgage:{$avg:'$age'}}}])
查询年龄大于16岁人员中,男生和女生的个数
db.actors.aggregate([{$match:{age:{$gt:16}}},{$group:{_id:'$gender',count:{$sum:1}}}])
mongodb的索引
db.collection.explain() #查询性能分析
db.actors.getIndexes() 查看当前索引
db.actors.dropIndexes() #删除所有索引