MongoDB 基本操作

270 阅读6分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情

集合的创建

MongoDB 数据库中的集合也叫做“文档集合”(相当于关系型数据库的表),它是用来存放文档(也就是一条数据)的。

创建有两种方式:

方式一:在添加第一条数据的时候顺便创建集合(前面实验中也提到过)。

use 数据库名字
db.集合名字.insertOne({"name":"xiaolan", "age":18, "hobby":["篮球","排球"]})

然后通过 show collections查看已有集合

方式二:使用 createCollection() 方法来创建集合。

语法格式:

db.createCollection(name, options)

  • name:要创建的集合名称
  • options:可选参数,指定有关内存大小及索引的选项,用于对集合增加一些限制:
db.createCollection('集合名字')

然后使用show table查询集合

show tables 命令跟 show collections 作用一样,都可以用来查询已有集合。

集合的删除

语法格式:

db.collection.drop()

其中 collection 指的是具体的集合名称。如果成功删除选定的集合,则 drop() 方法会返回 true,否则返回 false。

实例:删除 zss 数据库中的 zs 这个集合。

  • 首先查询已存在的集合
> use zss
switched to db lanqiao
> show collections
zs
>
  • 删除 zs 这个集合
> db.zs.drop()
true
> show tables

以上就是集合的删除,很简单。

到这里,我们已经知道了如何创建一个集合,接下来将给大家讲解如何对集合进行数据的增删改。接下来我们就一起来学习吧 😊。

在 MongoDB 中我们可以使用以下方法进行数据插入操作:

  • insert():若插入的数据主键已经存在,则会抛出 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。
  • save():如果 _id 主键存在则更新数据,若不存在就插入数据。
  • insertOne():3.2 版本之后新增的,用来向集合中插入一个新文档。
  • insertMany():3.2 版本之后新增的,用来向集合中插入一个或多个新文档。

插入

使用insert

需求:创建 zhangsan 数据库和 zs 集合,并给 zs 集合中插入一些课程信息的数据文档。

use zhangsan

db.zs.insert([

... {cno: '10001',cname: 'Java 程序设计',description: '这是一门 Java 新手课程',teacher: '张无忌'},

... {cno: '10002',cname: 'Web 前端开发',description: '这是一门前端进阶课程',teacher: '小龙女'},

... {cno: '10003',cname: 'Python 基础开发',description: '这是一门 Python 新手课程',teacher: '杨过'},

...])

使用 find() 方法可以查看已经存在的文档。

> db.lq1.find()
{ "_id" : ObjectId("616fb3331cdd487e7810011f"), "cno" : "10001", "cname" : "Java 程序设计", "description" : "这是一门 Java 新手课程", "teacher" : "张无忌" }
{ "_id" : ObjectId("616fb3331cdd487e78100120"), "cno" : "10002", "cname" : "Web 前端开发", "description" : "这是一门前端进阶课程", "teacher" : "小龙女" }
{ "_id" : ObjectId("616fb3331cdd487e78100121"), "cno" : "10003", "cname" : "Python 基础开发", "description" : "这是一门 Python 新手课程", "teacher" : "杨过" }
>

使用 save() 方法进行数据的插入

db.zs.save({cno: '10004',cname: 'SSM 框架',description: '这是框架课程',teacher: 'zs'})

使用 insertOne() 方法进行数据的插入

db.zs.insertOne({name:'James', age:23, addr:['Min','Cle']})

使用 insertMany() 方法进行数据的插入

db.lq2.insertMany([ ... {name:'Curry', age:35, addr:['Gsw','Chi']}, ... {name:'Wade', age:34, addr:['Min','Chi']} ... ])

  • 补充:如果想查询出来的结果展示更加美观,可以使用 pretty() 函数进行格式化。

db.lq2.find().pretty()

{ "_id" : ObjectId("616fbad31cdd487e78100124"),

"name" : "James",

"age" : 23,

"addr" : [ "Min", "Cle" ] }

更新:

update():用于更新已存在的文档

基本语法如下

db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)

参数说明:

参数说明
query第一个用来确定更新哪一条或哪几条文档,也就是查询条件
update用来提供更新的字段及其值
upsert可选。如果不存在更新的记录,是否插入新对象(true 为插入,false 不插入,默认为 false)
multi可选。默认为 false,只更新找到的第一条记录;如果设置为 true,就会将查出来的记录全部更新
writeConcern可选。抛出异常的级别

save():通过传入的文档来替换已有文档,_id 主键存在就更新,不存在就插入。

基本语法如下:

db.collection.save(
   <document>,
   {
     writeConcern: <document>
   }
)

参数说明:

  • document:文档数据
  • writeConcern:可选,抛出异常的级别

》 ✨ 说明:save() 方法本质是保存文档,如果执行更新操作,参数键值对中需要提供该文档中所有键值对数据,新的数据会覆盖原有的数据。

删除文档

MongoDB 中删除文档的方法有以下几个:

  • remove() :用来移除集合中的数据(已经过时),现在官方已不推荐使用。
  • deleteOne():用来删除一条数据
  • deleteMany():用来删除多条数据

使用 deleteOne() 方法删除数据

db.zs.deleteOne({cno:'10001'})

》如果有多条数据满足删除的条件,也只会删除第一个满足条件的数据。

使用 deleteMany() 方法删除数据

db.zs.deleteMany({teacher:'zs'})

》如果要删除满足多个条件数据,该如何实现呢?🤔️

首先肯定是选择 deleteMany() 方法,然后结合具体的需求实现

文档的查询

find():用来查询文档数据

  • 基本语法:db.collection.find(query,projection)

  • 参数说明:

    • query:可选,使用查询操作符指定查询条件。
    • projection:可选,使用投影操作符指定返回的键。省略该参数返回匹配文档中所有键值(默认省略)。

findOne():仅返回一个满足输入条件的文档并且自动格式化显示文档数据。

  • 基础语法:db.collection.findOne(query,projection)

  • 参数说明:

    • query:可选,使用查询操作符指定查询条件。
    • projection:可选,使用投影操作符指定返回的键。省略该参数返回匹配文档中所有键值(默认省略)。

MongoDB 的 find() 方法传入多个参数并且条件之间是的关系,语法格式如下:

db.collection.find({key1:value1, key2:value2})

MongoDB 中的 OR 条件需要使用关键字(操作符) $or,语法如下:

db.collection.find({$or: [{key1: value1}, {key2:value2}]})

条件操作符用于比较两个表达式并从 MongoDB 集合中获取数据,接下来我们就一起来看看 MongoDB 中的常用操作符,如下表所示:

操作操作符语法
大于(>)$gtdb.collection.find({age:{$gt:34}})
小于(<)$ltdb.collection.find({age:{$lt:34}})
大于等于(>=)$gtedb.collection.find({age:{$gte:34}})
小于等于(<=)$ltedb.collection.find({age:{$lte:34}})

过滤和排序的方法

👨‍🏫:MongoDB 中也可以针对查询的结果进行过滤和排序,接下来我们就一起来看看吧。

  • Limit():读取指定数量的数据记录

    基本语法如下:

    db.collection.find().limit(number)

    参数:

    number:是指定读取数据的数量

skip():用来跳过指定数量的数据记录。

基本语法如下:

db.collection.find().skip(number)

参数:

number:是指定跳过数据的数量

sort():可以用来对查询的结果进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 或 -1 来指定排序的方式,其中 1 为升序排序,-1 为降序排序

基本语法如下:

db.collection.find().sort({key:1})