MongoDB笔记目录
一.数据库操作
数据库操作 | 指 令 |
---|---|
创建数据库 | use 数据库名 |
查看当前数据库 | db |
查看所有数据库 | show dbs |
删除数据库 | db.dropDatabase() |
二.集合操作
集合操作 | 指 令 |
---|---|
创建集合 | db.createCollection(“集合名”) |
删除集合 | db.集合名.drop() |
获取所有集合 | show collection |
三.基本的增删查改
1.存入数据
db.集合名称.insert(条件)
如下
// 插入单个文档
db.students.insertOne({name: 'Eve', age: 28})
//students是集合名
// 插入多个文档
db.students.insertMany(
{name: 'Frank', age: 32},
{name: 'Grace', age: 27}
)
2.删除数据
db.集合名称.remove(条件)
例如,删除 students 集合中年龄为 20 的一条文档:
db.students.deleteOne({ age: 20 });
例如,删除 students 集合中年龄大于 18 的所有文档:
db.students.deleteMany({ age: { $gt: 18 } });
3.更新数据
db.集合名称.updata(条件)
示例将把 name 为 “Alice” 的文档中的 age 字段更新为 25:
db.users.updateOne(
{ name: "Alice" }, // 查询条件
{ $set: { age: 25 } } // 更新内容
)
示例将把所有 status 为 “active” 的文档中的 lastLogin 字段更新为当前日期:
db.users.updateMany(
{ status: "active" }, // 查询条件
{ $set: { lastLogin: new Date() } } // 更新内容
)
更新运算符
MongoDB 提供了多种更新操作符,用于指定更新的方式。常用的更新操作符:
名称 | 描述 |
---|---|
$set | 设置文档中字段的值。 |
$inc | 将字段的值增加指定的数量。 |
$min | 仅当指定值小于现有字段值时才更新该字段。 |
$max | 仅当指定值大于现有字段值时才更新该字段。 |
$mul | 将字段的值乘以指定的数量。 |
$rename | 重命名字段。 |
$unset | 从文档中删除指定的字段。 |
$currentDate | 将字段的值设置为当前日期(日期或时间戳)。 |
4.查询数据
db.集合名称.find(条件)
find函数操作符
比较操作符:
$eq(等于):用于查找等于指定值的文档。 例如 {field: {$eq: value}}。
$ne(不等于):查找不等于指定值的文档。 例如 {field: {$ne: value}}。
$gt(大于):查找字段值大于指定值的文档。 例如 {field: {$gt: value}}。
$gte(大于等于):查找字段值大于或等于指定值的文档。 例如 {field: {$gte: value}}。
$lt(小于):查找字段值小于指定值的文档。 例如 {field: {$lt: value}}。
$lte(小于等于):查找字段值小于或等于指定值的文档。 例如 {field: {$lte: value}}。
逻辑操作符:
$and:用于组合多个条件,只有当所有条件都满足时才返回文档。 例如 {$and: [{condition1}, {condition2}]}。
$or:组合多个条件,只要其中一个条件满足就返回文档。 例如 {$or: [{condition1}, {condition2}]}。
$not:对一个条件取反。 例如 {field: {$not: {condition}}}。
元素操作符:
$exists:检查字段是否存在。 例如 {field: {$exists: true}} 表示查找存在该字段的文档,
例如 {field: {$exists: false}} 查找不存在该字段的文档。
数组操作符:
$in:查找字段值在指定数组中的文档。 例如 {field: {$in: [value1, value2]}}。
$nin:查找字段值不在指定数组中的文档。 例如 {field: {$nin: [value1, value2]}}。
$all:用于数组字段,要求文档中的数组字段包含指定数组中的所有元素。 例如 {arrayField: {$all: [element1, element2]}}。
正则表达式操作符:
$regex:使用正则表达式进行模式匹配查询。 例如 {field: {$regex: /pattern/}}。
1. 查询所有文档
db.collection.find()
//或者
db.collection.find({})
2.条件查询
查询 age 字段值为 25 的文档 :
db.users.find({ age: 25 })
查询 age 字段值在 20 到 30 之间(不包括 30)的文档:
db.users.find({ age: { $gt: 20, $lt: 30 } })
四.聚合和管道
注意:
1.容易报错的点
db.集合名.aggregate([ ]) 用中括号 而之前用的大括号
聚合表达式
表达式 | 描述 |
---|---|
$sum | 计算求和 |
$avg | 计算平均值 |
$min | 获取集合文档中的最小值 |
$max | 获取集合文档中的最大值 |
$push | 将指定字段的值添加到一个数组中 |
$addToSet | 将指定字段的值添加到一个集合中,确保集合中不包含重复值 |
$first | 根据资源文档的排序获取第一个文档数据 |
$last | 根据资源文档的排序获取最后一个文档数据 |
聚合框架中的管道操作
表达式 | 描述 |
---|---|
$group | 将集合中的文档进行分组,便于后续统计结果 |
$limit | 用于限制MongoDB聚合管道返回的文档数 |
$match | 用于过滤数据,只输出符合条件的文档 |
$sort | 将输入的文档先进行排序,再输出 |
$project | 用于修改输入文档的结构(增加、删除字段等)和名称 |
$skip | 在聚合管道中跳过指定数量的文档,并返回剩余的文档 |
聚合管道之$count的概述
计数并返回与查询匹配的结果数。
(1)、$ match阶段筛选出type匹配technology的文档,并传到下一阶段;
(2)、$ count阶段返回聚合管道中剩余文档的计数,并将该值分配给type_count
db.books.aggregate([ {$match:{type:"technology"}}, {$count: "type_count"} ])
例题(1)操作goods,找到价格在10到100的人民文学出版社出版的图书(match实现)
db.goods.aggregate([
{
$match: {
price: { $gte: 10, $lte: 100 },
publish: '人民文学出版社'
}
}
]);
五.索引
声明
同步上课笔记
后续更新,方便复习