新建数据库
语法:
use DATABASE NAME
use:用于切换/创建数据库,若不存在则创建,否则切换到指定数据库。
DATABASE_NAME:数据库名称。
执行use articledb命令,创建数据库articledb。
查看数据库
语法: 查看全部数据库
show dbs
删除数据库
语法
db.dropDatabase()
db:表示当前数据库对象。
dropDatabase():用于删除当前数据库的方法。
删除当前数据库,执行命令前应使用use命令切换到要删除的数据库,为了防止误删可执行命令db验证当前数据库是否为指定删除的数据库。
集合操作
创建集合
语法
显示创建
db.createCollection(COLLECTION NAME, [OPTIONS])
隐式创建
db.COLLECTION NAME.insert(DOCUMENT)
db:表示当前数据库对象。
createCollection():创建集合方法。
DOCUMENT表示文档。
COLLECTION_NAME表示集合名称。
OPTIONS表示集合配置。
insert():向集合中插入文档的方法。
删除集合
语法
db.COLLECTION NAME.drop()
db:表示当前数据库对象。
COLLECTION_NAME:表示集合名称。
drop():删除集合方法。
文档操作
文档插入
语法(单文档插入)
db.COLLECTION NAME.insert(document)
或者
db.COLLECTION NAME.save(document)
语法(多文档插入)
db.COLLECTION NAME.insertMany([document1,document2,…])
db:当前数据库对象
COLLECTION_NAME: **当前集合对象。
insert() 和save():插入单文档方法。
insertMany():插入多文档方法。
insert()和save()方法的区别在于,若使用insert()方法插入文档时,集合中已存在该文档,则会报错。若使用save()方法插入文档时,集合中已存在该文档,则会覆盖。
文档更新
语法
db.COLLECTION NAME.update(criteria,objNew,upsert, multi)
db:当前数据库对象。
COLLECTION_NAME: 当前集合对象。
update():更新文档方法。
criteria: 更新的查询条件,类似sql中的where。
objNew:新的对象和操作符,类似sql中的set。
upsert:不存在更新对象时,是否插入,默认为false
multi:默认为false,只更新查找到的第一个文档,反之更新所有。
升级语法
db.集合名.update(条件, 新数据){修改器: {键:值}}
文档删除
语法(删除单个)
删除全部文档
db.COLLECTION NAME.remove({})
db:当前数据库对象。
COLLECTION_NAME:当前集合对象。
remove():删除文档方法。
query:删除文档的条件,可选参数。
justOne:的boolean为true或1时,表示只删除查询出的第一个文档。
writeConcern: 表示抛出异常级别。
文档简单查询
查询所有文档语法
db.COLLECTION NAME.find()
查询所有文档,以易读的方式展示
db.COLLECTION NAME.find().pretty()
db:当前数据库对象
COLLECTION_NAME:当前集合对象
find():查询所有文档方法
pretty():格式化查询返回结果
聚合操作
聚合管道操作是将文档在一个管道处理完毕后,把处理的结果传递给下一个管道进行再次处理。聚合管道是使用不同的管道阶段操作器进行不同聚合操作,管道阶段操作器也可称为管道操作符,常见管道操作符如下表。
语法(略复杂)
其中“[]”不是必须的,可以省略!!!
常用表达式
管道阶段操作器的值被称为管道表达式,并且每个管道表达式都是一个文档结构,由字段名称、字段值和管道表达式组成。常见的管道表达式如下表。
案例说明
练习1:统计运动鞋和电子通讯的价格price
db.c5.aggregate([
{
KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{ id: "type",
rs: {s u m : " sum: "sum:"price"}
}
}
])
//对于g r o u p 分组 i d 是必选项,选择字段 t y p e 进行分组时,字段前面要加上 group分组 id是必选项,选择字段type进行分组时,字段前面要加上group分组id是必选项,选择字段type进行分组时,字段前面要加上符号
//rs为新增的列,存放统计数据,男女生的总年龄计算使用$sum
// id和rs都可以加上双引号,没有差别
练习2 统计运动鞋和电子通讯的个数
db.c5.aggregate([
{
KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup:{ " id": "type",
"
gs
"
:
{KaTeX parse error: Expected 'EOF', got '}' at position 7: sum: 1}̲ } } ]) //这里没有c…sum:1代替(匹配多少次,就多少个1相加),这里展示 id和gs加上双引
号
练习3 求商品总数和平均价格
db.c5.aggregate([
{
KaTeX parse error: Expected '}', got 'EOF' at end of input: …ll, total num:{sum:1},
total price avg:{a v g : " avg:"avg:"price"}
}
}
])
这里求的是总人数,管道依然可以选择分组,但是没有分组字段,所以_id为null
total_num为新增的列,存放总数
total_price_avg为新增的列,存放平均价格
练习4:使用$min表达式,将集合陈中的文档按类型type进行分组,并计算各个分组中价格price最小值,具体命令如下。
db.c5.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{" id":"type",“price”:{m i n : " min:"min:"price"}}}]).pretty()
练习5 使用$max表达式,将集合c5中的文档按类型type进行分组,并计算各个分组中价格price最大
值,具体命令如下。
db.c5.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{" id":"type",“price”:{m a x : " max:"max:"price"}}}]).pretty()