likes
comments
collection
share

MongoDB 增删改查操作

作者站长头像
站长
· 阅读数 19

Node.js、PHP、Java、GO 等服务端语言等能执行增删改查操作,本小节介绍用 mongosh 执行增删改查,在此之前必须连接 MongoDB 实例。增删改查都是针对 document 而言,在执行这些操作之前必须切换到数据库,引用该数据库中的集合。在 mongosh 中运行下面这些命令去展示、切换、创建数据库。

// 显示正在使用的数据库
db

// 列出用户可用的数据库
show dbs

// 切换或创建数据库
use <database>

// 列出当前数据库所有的集合
show collections

// 向某集合中插入一个document
db.<collection>.insertOne({....})
db.getCollection("<collection>").insertOne({....})

use 后跟数据库名,如果该数据库不存在,那么会先创建它再切换到这个数据库,如果已经存在,那么直接切换到该数据库。上述 <collection> 指的是某特定集合,如果该集合不存在,那么会先创建再进行后续操作,如果已经存在,则直接进行后续操作。

1.插入操作

它是指为某个集合添加新的 document。如果该集合不存在,则先创建该集合。运行下面的命令为名为student 的集合添加一条新的 document。

db.student.insertOne({
  name: 'heyu',
  age: 12,
  grade: 6
})

运行下面的命令为名为 student 的集合添加多条新的 document。

db.student.insertMany([
{
  name: 'Li',
  age: 11,
  grade: 6
},
{
  name: 'bella',
  age: 13,
  grade: 6
}
])

使用insertOne()和insertMany()为集合添加新的document时,如果给函数传递的document没有指定_id字段,那么MongoDB会在每个document中添加类型为ObjectId的_id字段。这两个函数都会返回新添加的document。

2.查询操作

它是指查询某个集合中的 document。运行下面的命令查询集合中全部的 document。

db.student.find()

执行下面的命令查询name字段为 'heyu'的 document。

db.student.find( { name: 'heyu' } )

执行下面的命令列出 age 字段大于 12 的 document

db.student.find( { age: { $gt: 12 } } )

上述$gt是一个比较运算符,除了$gt还有如下的比较运算符。

名称描述
$eq匹配与指定值相等的数值
$gt匹配大于指定值的数值
$gte匹配大于等于指定值的数值
$in匹配数组中指定的任何一个值
$lt匹配小于指定值的数值
$lte匹配小于等于指定值的数值
$ne匹配所有不等于指定值的数值
$nin匹配数组中没有指定的值

执行下面的命令列出 name 为 'heyu' 或者 age 字段值大于 12 的 document。

db.student.find( {
$or: [{age: { $gt: 12 }}, {name: 'heyu'}]
})

上述$or是逻辑运算符,除了$or还有如下的逻辑运算符.

名称描述
$and逻辑与,返回同时匹配两个子句的 Document
$or逻辑或,返回匹配任一子句的 Document
$not逻辑非,返回与查询表达式不匹配的 Document
$nor逻辑或非,它是逻辑或的反面,返回不匹配全部子句的 Document。

3.更新操作

它是指更新集合中已存在的 document。执行下面的命令更新集合中 grade 字段值为 6 的第一个 document。

db.student.updateOne({ grade: 6 }, { $set: { name: 'xiao hua' }, $currentDate: { lastModified: true } })

上述$set操作符将 name 字段的值更新为 'xiao hua';$currentDate操作符将 lastModified 字段的值更新为当前日期。如果 lastModified 字段在 document 中不存在,那么$currentDate会为 document 创建该字段。$set$currentDate都属于更新操作符,下表罗列了全部更新操作符。

名称描述
$currentDate将字段的值设置为当前日期,可以是也可以是时间戳。
$inc将字段的值在现在的基础上增加指定的数量。
$min当指定的值小于现有字段的值时才更新字段。
$max当指定的值大于现有字段的值时才更新字段。
$mul将该字段的值在现在的基础上乘以指定的数量。
$rename修改字段名
$set以指定的值更新字段
$setOnInsert如果更新操作导致一个 Document 被添加到 Collection中,那么$setOnInsert将指定的值分配给 Document 中的字段。如果更新操作没有导致新增 Document,$setOnInsert不做任何事情。
$unset从 Document 中删除指定的字段

执行下面的命令将集合中 grade 字段为 6 的全部 document 的 age 字段在现在的基础上加 1。

db.student.updateMany({ grade: 6  }, { $inc: { age: 1  } })

执行下面的命令将集合中 name 字段为'xiao hua'的第一个 document 替换成 { name: 'heyu' }。

db.student.replaceOne({name: 'xiao hua'}, { name: 'heyu' })

updateOne 只更新匹配的 document 中某些字段,replaceOne 会替换掉整个匹配的 document,另外 replaceOne 不能使用更新操作符。

4.删除操作

它是指从集合中删除 document。执行下面的命令删除集合中所有的 document。

db.student.deleteMany({})

执行下面的命令从集合中删除 name 字段为 'heyu' 的全部 document。

db.student.deleteMany({name: 'heyu'})

执行下面的命令从集合中删除 name 字段为 'heyu' 的第一个 document

db.student.deleteOne({name: 'heyu'})

推荐阅读

  1. 在 macOS 上安装 MongoDB
转载自:https://juejin.cn/post/7249382407244349495
评论
请登录