MongoDB 增删改查操作

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

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYIEJoOk' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片