一、Database
- 查看当前的数据库:
db
- 查看所有的数据库:
show dbs /show databases
- 切换数据库:
use db_name
- 删除当前的数据库:
db.dropDatabase()
二、集合
向不存在的集合中第⼀次加⼊数据时, 集合会被创建出来db.createCollection(name,options)
db.createCollection("stu")
db.createCollection("sub", { capped : true, size : 10 } )
参数capped
: 默认值为false
表示不设置上限
参数size
: 当capped
值为true
时, 需要指定此参数, 表示上限⼤⼩,当⽂档达到上限时, 会将之前的数据覆盖, 单位为字节
查看集合:show collections
删除集合:db.集合名称.drop()
三、数据类型
Object ID
: ⽂档ID,每个⽂档都有⼀个属性, 为_id
, 保证每个⽂档的唯⼀性,也可以自己设置。ObjectID
是⼀个12字节的⼗六进制数:前4个字节为当前时间戳,接下来3个字节的机器ID,接下来的2个字节中MongoDB的服务进程id,最后3个字节是简单的增量值。String
: 字符串, 最常⽤, 必须是有效的UTF-8Boolean
: 存储⼀个布尔值, true或falseInteger
: 整数可以是32位或64位, 这取决于服务器Double
: 存储浮点值Arrays
: 数组或列表, 多个值存储到⼀个键Object
: ⽤于嵌⼊式的⽂档, 即⼀个值为⼀个⽂档Null
: 存储Null值Timestamp
: 时间戳, 表示从1970-1-1到现在的总秒数
Date
: 存储当前⽇期或时间的UNIX时间格式,创建⽇期语句如下 :参数的格式为YYYY-MM-DD
,new Date('2017-12-20')
四、插入
db.集合名称.insert(document)
db.stu.insert({name:'gj',gender:1})
db.stu.insert({_id:"20170101",name:'gj',gender:1})
插⼊⽂档时, 如果不指定_id
参数, MongoDB会为⽂档分配⼀个唯⼀的ObjectId
五、保存
db.集合名称.save(document)
如果⽂档的_id已经存在则修改, 如果⽂档的_id不存在则添加
六、更新
db.集合名称.update(<query> ,<update>,{multi: <boolean>})
参数query
:查询条件
参数update
:更新操作符
参数multi
:可选, 默认是false
,表示只更新找到的第⼀条记录。
db.stu.update({name:'hr'},{name:'mnc'}) 更新一条
db.stu.update({name:'hr'},{$set:{name:'hys'}}) 更新一条
db.stu.update({},{$set:{gender:0}},{multi:true}) 更新全部
七、删除
db.集合名称.remove(<query>,{justOne: <boolean>})
参数query
:可选,删除的⽂档的条件
参数justOne
:可选, 如果设为true或1, 则只删除⼀条, 默认false, 表示删除多条
八、查询
1、基本查询
⽅法find()
: 查询
db.集合名称.find({条件⽂档})
⽅法findOne()
:查询,只返回第⼀个
db.集合名称.findOne({条件⽂档})
⽅法pretty()
: 将结果格式化
db.集合名称.find({条件⽂档}).pretty()
2、比较运算符
等于: 默认是等于判断, 没有运算符
⼩于:$lt
(less than)
⼩于等于:$lte
(less than equal)
⼤于:$gt
(greater than)
⼤于等于:$gte
不等于:$ne
db.stu.find({age:{$gte:18}})
3、逻辑运算符
and
:在json中写多个条件即可
查询年龄⼤于或等于18, 并且性别为true的学⽣
db.stu.find({age:{$gte:18},gender:true})
or
:使⽤$or
, 值为数组, 数组中每个元素为json
查询年龄⼤于18
, 或性别为false
的学⽣
db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})
查询年龄⼤于18或性别为男⽣, 并且姓名是郭靖
db.stu.find({$or:[{age:{$gte:18}},{gender:true}],name:'gj'})
4、范围运算符
使⽤"$in
", “$nin
” 判断是否在某个范围内
查询年龄为18、 28的学⽣
db.stu.find({age:{$in:[18,28]}})
5、支持正则表达式
使⽤//
或$regex
编写正则表达式
查询姓⻩的学⽣
db.stu.find({name:/^⻩/})
db.stu.find({name:{$regex:'^⻩'}})
6、分页查询
⽅法limit()
: ⽤于读取指定数量的⽂档
db.集合名称.find().limit(NUMBER)
查询2条学⽣信息
db.stu.find().limit(2)
⽅法skip()
: ⽤于跳过指定数量的⽂档
db.集合名称.find().skip(NUMBER)
db.stu.find().skip(2)
同时使用
db.stu.find().limit(4).skip(5)
或
db.stu.find().skip(5).limit(4)
7、自定义查询
使⽤$where
后⾯写⼀个函数, 返回满⾜条件的数据
查询年龄⼤于30的学⽣
db.stu.find({
$where:function() {
return this.age>30;}
})
8、投影
在查询到的返回结果中, 只选择必要的字段
db.集合名称.find({},{字段名称:1,...})
参数为字段与值, 值为1
表示显示, 值为0
不显
特殊: 对于_id列默认是显示的, 如果不显示需要明确设置为0
db.stu.find({},{_id:0,name:1,gender:1})
9、排序
⽅法sort()
, ⽤于对集合进⾏排序
db.集合名称.find().sort({字段:1,...})
参数1
为升序排列
参数-1
为降序排列
根据性别降序, 再根据年龄升序
db.stu.find().sort({gender:-1,age:1})
10、统计个数
⽅法count()
⽤于统计结果集中⽂档条数
db.集合名称.find({条件}).count()
db.集合名称.count({条件})
db.stu.find({gender:true}).count()
db.stu.count({age:{$gt:20},gender:true})
11、消除重复
⽅法distinct()
对数据进⾏去重
db.集合名称.distinct('去重字段',{条件})
db.stu.distinct('hometown',{age:{$gt:18}})
九、聚合
1、概念
聚合(aggregate)是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果。
db.集合名称.aggregate({管道:{表达式}})
2、常用管道
在mongodb中,⽂档处理完毕后, 通过管道进⾏下⼀次处理
常用管道如下:
$group
: 将集合中的⽂档分组, 可⽤于统计结果
$match
: 过滤数据, 只输出符合条件的⽂档
$project
: 修改输⼊⽂档的结构, 如重命名、 增加、 删除字段、 创建计算结果
$sort
: 将输⼊⽂档排序后输出
$limit
: 限制聚合管道返回的⽂档数
$skip
: 跳过指定数量的⽂档, 并返回余下的⽂档
$unwind
: 将数组类型的字段进⾏拆分
3、表达式
处理输⼊⽂档并输出
语法:表达式:'$列名'
常⽤表达式:
$sum
: 计算总和,
s
u
m
:
1
表
示
以
⼀
倍
计
数
‘
sum:1 表示以⼀倍计数 `
sum:1表示以⼀倍计数‘avg: 计算平均值
m
i
n
‘
:
获
取
最
⼩
值
‘
min`: 获取最⼩值 `
min‘:获取最⼩值‘max: 获取最⼤值
p
u
s
h
‘
:
在
结
果
⽂
档
中
插
⼊
值
到
⼀
个
数
组
中
‘
push`: 在结果⽂档中插⼊值到⼀个数组中 `
push‘:在结果⽂档中插⼊值到⼀个数组中‘first: 根据资源⽂档的排序获取第⼀个⽂档数据
$last`: 根据资源⽂档的排序获取最后⼀个⽂档数据
十、分组
十一、$match
match是管道命令,能将结果交给后一个管道,但是find不可以
十二、$project
十三、$sort
十四、$limit
和$skip
十五、$unwind
十六、交互