MongoDB入门

前戏

# 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"})

posted @ 2022-02-12 12:25  程序员少帅  阅读(7)  评论(0)    收藏  举报