前戏
# 1)基本操作
use demo # 切换数据库,不存在则创建
exit或者ctrl+c # 退出客户端
db # 查看当前操作的数据库
show dbs/databases # 查看所有的数据库
# 注:创建的数据库,插入数据之后就会显示,没有数据则不会显示
db.demo.insert({'name':'shuai'}) # 插入数据
# 2) 删除数据库
db.dropDatabase() # 删除当前数据库
db.集合名称.drop() # 集合删除语法格式
db.createCollection('shuai',{capped;true, autoIndexId: true,size:10, max:10000})
"""
参数capped:默认值为false表示不设置上限,值为true表示设置上限
参数size:集合所占用的字节数。 当capped值为true时,需要指定此参数,表示上限大小,当文档达到上限时, 会将之前的数据覆盖,单位为字节
参数max: 文档最大个数为10000个
"""
db.createCollection('shuai') # 先创建集合 类似于mysql里面的表
db.shuai.drop() # 删除
show tables # show collections 该命令会更加准确点
操作数据
插入文档
# 1)MongoDB使用insert()或save()方法向集合中插入文档
db.collection_name.insert(document) # 数据存在则报错,不更改数据
db.collection_name.save(document) # 数据存在更新数据,不存在插入数据,新版本已被废弃,可以使用 db.collection.insertOne() 或 db.collection.replaceOne() 来代替。
# 2)db.collection.insertOne() 和 db.collection.replaceOne()的用法
# db.collection.insertOne() 向集合中插入一个新文档
db.collection.insertOne(
<document>, # 要写如何的文档
{
writeConcern: <document> # 写入策略,默认为 1,即要求确认写操作,0 是不要求。
}
)
# db.collection.replaceOne() 向集合中插入多个文档
db.collection.insertMany(
[ <document 1> , <document 2>, ... ],
{
writeConcern: <document>,
ordered: <boolean> # 指定是否按顺序写入,默认true
}
)
# 3) 实例
db.createCollection('demo') # 先创建集合 类似于mysql里面的表
# 如果该集合不在数据库中,会创建集合并且插入数据
db.demo.insert({title: 'shuai',
description: '他是个好人',
by: '学校',
url:'https:zbu.cn',
tags:['male','study'],
likes:100
})
db.demo.find() # 查看数据
db.demo.find().pretty() # 有格式的展示数据
{ "_id" : ObjectId("62064a748082b24062fd1133"), "title" : "shuai", "description" : "他是个好人", "by" : "学校", "url" : "https:zbu.cn", "tags" : [ "male", "study" ], "likes" : 100 }
"""
注意:也可以给插入的数据赋值一个变量,最后同一插入
"""
更新数据
# 1) update()方法用于更新已存在的文档
db.demo.update({'title':'shuai'},{$set:{'title':'小帅'}}) # 把标题更新,修改一条文档
db.demo.update({'title':'shuai'},{$set:{'title':'小帅'}},{multi:true}) # 修改多条文档
db.demo.find().pretty() # 有格式的展示数据
# 2) save()方法数据存在就更新,不存在就插入
删除数据
db.demo.remove({'title':'shuai'}) # 删除该集合中,title为shuai的文档
db.demo.remove({}) # 删除集合中所有的数据
查询文档
# 1) 查询命令
命令:db.集合名称.find({条件文档})
db.集合名称.findone({条件文档}) # 匹配查询到的第一个数据,不能与.pretty()连用
db.stu.insert([{"name" : "郭靖", "hometown" : "蒙古", "age" : 20, "gender" : "male" },
{"name" : "黄蓉", "hometown" : "桃花岛", "age" : 18, "gender" : "famale" },
{"name" : "华筝", "hometown" : "蒙古", "age" : 18, "gender" : "famale" },
{"name" : "黄药师", "hometown" : "桃花岛", "age" : 40, "gender" : "male" },
{"name" : "段誉", "hometown" : "大理", "age" : 16, "gender" : "famale" },
{"name" : "段王爷", "hometown" : "大理", "age" : 45, "gender" : "famale" },
{"name" : "洪七公", "hometown" : "华筝", "age" : 18, "gender" : "male" }])
# 比较运算符
"""
等于:默认是等于判断,没有运算符
小于:$lt
小于等于:$lte
大于:$gt
大于等于:$gte
不等于:$ne
"""
# 查询年龄大于等于18的所有学生
db.stu.find({age:{$gte:18}})
# 查询年龄大于等于18, 并且性别为male的学生
db.stu.find({age:{$gte:18},gender:"male"})
# 查询年龄大于18, 或性别为famale的学生
db.stu.find({$or:[{age:{$gt:18}},{gender:'famale'}]})
# 查询年龄大于18或性别为男生, 并且姓名是郭靖
db.stu.find({$or:[{age:{$gt:18}},{gender:'male'}],name:'郭靖'})
# 查询年龄为18、28、39的学生 ($in, $nin)
db.stu.find({age:{$in:[18,28,39]}})
# 查询name以'黄'开头的数据 (支持正则)
db.stu.find({name:{$regex:'^黄'}})
# 2)skip和limit方法
db.stu.find().limit(2) # 查询前两条数据
db.stu.find().skip(2) # 跳过两条数据
# 2.1)同时使用
db.stu.find().limit(2).skip(3)
db.stu.find().skip(3).limit(2) # 这个效率要高于前者
# 3)排序
# 参数1为升序排列 参数-1为降序排列
db.stu.find().sort({gender:-1,age:1}) # 根据性别排序,再根据年龄升序
# 4)统计个数
db.stu.find({gender:"male"}).count()
db.stu.count({age:{$gt:20},gender:"male"})