MongoDB基本语法

MongoDB 基本语法详解

MongoDB 是一种面向文档的 NoSQL 数据库,支持灵活的数据结构和高扩展性,广泛应用于现代应用程序开发。MongoDB 采用 BSON(Binary JSON)格式存储数据,使得其能够存储复杂嵌套的结构。

1. 数据库和集合操作

MongoDB 中的数据库和集合类似于关系型数据库中的数据库和表。每个 MongoDB 实例可以包含多个数据库,每个数据库包含多个集合(collection)。集合中存储的是 BSON 格式的文档。

1.1 创建/切换数据库

bash 复制代码
use myDatabase

该命令会创建一个名为 myDatabase 的数据库(如果不存在),并切换到该数据库。

1.2 查看当前数据库

bash 复制代码
db

使用 db 命令可以显示当前连接的数据库名称。

1.3 查看所有数据库

bash 复制代码
show dbs

该命令用于显示 MongoDB 实例中的所有数据库。

1.4 删除数据库

bash 复制代码
db.dropDatabase()

该命令会删除当前连接的数据库及其所有数据。

2. 集合操作

2.1 创建集合

bash 复制代码
db.createCollection("myCollection")

手动创建一个名为 myCollection 的集合。MongoDB 是动态模式(schema-less)的,所以即使不显式创建集合,在插入数据时 MongoDB 也会自动创建。

2.2 查看集合

bash 复制代码
show collections

查看当前数据库中的所有集合。

2.3 删除集合

bash 复制代码
db.myCollection.drop()

删除名为 myCollection 的集合及其中的所有文档。

3. 文档的 CRUD 操作

文档是 MongoDB 中的基本数据单元,它以 BSON 格式存储,类似于 JSON 对象。接下来我们将详细介绍文档的增删改查操作。

3.1 插入文档

MongoDB 提供了三种插入文档的方式:insertOne()insertMany()insert()

3.1.1 插入单个文档
bash 复制代码
db.myCollection.insertOne({
  name: "John Doe",
  age: 30,
  address: { city: "New York", zip: "10001" }
})

该命令在集合 myCollection 中插入一条文档。

3.1.2 插入多个文档
bash 复制代码
db.myCollection.insertMany([
  { name: "Alice", age: 25 },
  { name: "Bob", age: 28 }
])

insertMany() 用于一次插入多条文档。

3.1.3 插入数据自动创建集合

即使集合不存在,执行插入操作时 MongoDB 会自动创建集合。

3.2 查询文档

MongoDB 支持强大的查询功能,可以根据条件筛选出符合要求的文档。

3.2.1 查询所有文档
bash 复制代码
db.myCollection.find()

该命令返回集合中的所有文档。

3.2.2 条件查询
bash 复制代码
db.myCollection.find({ age: { $gt: 25 } })

find() 函数可以传入查询条件,这里 { $gt: 25 } 表示查找 age 字段大于 25 的文档。

3.2.3 限制返回字段
bash 复制代码
db.myCollection.find({ age: { $gt: 25 } }, { name: 1, _id: 0 })

该命令查询 age 大于 25 的文档,并只返回 name 字段,_id 字段不返回。

3.2.4 查询单个文档
bash 复制代码
db.myCollection.findOne({ name: "Alice" })

该命令返回第一个符合条件的文档。

3.2.5 查询结果排序
bash 复制代码
db.myCollection.find().sort({ age: -1 })

该命令按 age 字段降序排列结果。

3.2.6 查询结果分页
bash 复制代码
db.myCollection.find().limit(5).skip(10)

该命令返回查询结果中的第 11 到第 15 条文档,适用于分页功能。

3.3 更新文档

MongoDB 提供 updateOne()updateMany()replaceOne() 来更新文档。

3.3.1 更新单个文档
bash 复制代码
db.myCollection.updateOne(
  { name: "Alice" },
  { $set: { age: 26 } }
)

该命令更新 nameAlice 的文档,将其 age 字段更新为 26。

3.3.2 更新多个文档
bash 复制代码
db.myCollection.updateMany(
  { age: { $lt: 30 } },
  { $set: { status: "young" } }
)

该命令将所有 age 小于 30 的文档的 status 字段设置为 young

3.3.3 替换文档
bash 复制代码
db.myCollection.replaceOne(
  { name: "Bob" },
  { name: "Robert", age: 35 }
)

replaceOne() 替换整个文档,而不仅仅是更新部分字段。

3.4 删除文档

3.4.1 删除单个文档
bash 复制代码
db.myCollection.deleteOne({ name: "John Doe" })

该命令删除 nameJohn Doe 的文档。

3.4.2 删除多个文档
bash 复制代码
db.myCollection.deleteMany({ age: { $gt: 30 } })

该命令删除所有 age 大于 30 的文档。

4. 索引操作

MongoDB 支持在字段上创建索引以加快查询速度,类似于关系型数据库中的索引。

4.1 创建单字段索引

bash 复制代码
db.myCollection.createIndex({ name: 1 })

该命令为 name 字段创建升序索引。

4.2 创建复合索引

bash 复制代码
db.myCollection.createIndex({ name: 1, age: -1 })

该命令为 nameage 字段创建复合索引,name 字段升序,age 字段降序。

4.3 查看集合索引

bash 复制代码
db.myCollection.getIndexes()

该命令查看集合中的所有索引。

4.4 删除索引

bash 复制代码
db.myCollection.dropIndex("name_1")

该命令删除名为 name_1 的索引。

5. 聚合操作

MongoDB 提供了功能强大的聚合框架,允许在查询过程中进行数据处理和转换。

5.1 聚合管道

bash 复制代码
db.myCollection.aggregate([
  { $match: { age: { $gte: 25 } } },
  { $group: { _id: "$status", avgAge: { $avg: "$age" } } }
])

该命令首先筛选出 age 大于等于 25 的文档,然后按照 status 字段分组并计算每组的平均年龄。

5.2 聚合阶段常用操作

  • $match:过滤数据,类似于 find()
  • $group:按某个字段分组并计算聚合值。
  • $project:选择和重命名返回的字段。
  • $sort:对结果进行排序。

6. 常用运算符

MongoDB 提供了一些常用的查询和更新运算符,用于处理各种复杂的查询和数据操作。

6.1 查询运算符

  • $gt:大于
  • $lt:小于
  • $gte:大于等于
  • $lte:小于等于
  • $ne:不等于
  • $in:包含于数组
  • $nin:不包含于数组
  • $exists:字段是否存在

6.2 更新运算符

  • $set:设置字段值
  • $inc:增加字段值
  • $unset:删除字段
  • $push:向数组字段追加元素
  • $pull:从数组字段删除元素

7. 安全与权限

MongoDB 支持用户认证和角色管理,可以根据角色对数据库进行权限控制。

7.1 创建用户

bash 复制代码
db.createUser({
  user: "myUser",
  pwd: "password",
  roles: [ { role: "readWrite", db: "myDatabase" } ]
})

该命令创建一个 myUser 用户,并赋予其对 `myDatabase

` 的读写权限。

7.2 删除用户

bash 复制代码
db.dropUser("myUser")

删除名为 myUser 的用户。

结论

本文详细介绍了 MongoDB 的基本语法,从数据库和集合的操作,到文档的 CRUD、索引、聚合,以及常见的查询和更新运算符。MongoDB 具有极大的扩展性和灵活性,适合现代 Web 应用程序开发中的大规模数据处理场景。

相关推荐
husterlichf35 分钟前
MYSQL 常用数值函数 和 条件函数 详解
数据库·sql·mysql
我的golang之路果然有问题38 分钟前
快速了解redis,个人笔记
数据库·经验分享·redis·笔记·学习·缓存·内存
卡皮巴拉爱吃小蛋糕1 小时前
MySQL的MVCC【学习笔记】
数据库·笔记·mysql
农民也会写代码1 小时前
dedecms织梦arclist标签noflag属性过滤多个参数
开发语言·数据库·sql·php·dedecms
m0_748232921 小时前
你还在手动画ER图吗?让SQL自动生成ER图,轻松解决作业难题!
数据库·sql·oracle
清流君1 小时前
【MySQL】数据库 Navicat 可视化工具与 MySQL 命令行基本操作
数据库·人工智能·笔记·mysql·ue5·数字孪生
邂逅岁月1 小时前
MySQL表的增删改查初阶(下篇)
数据库·sql·mysql
Python_金钱豹1 小时前
Text2SQL零代码实战!RAGFlow 实现自然语言转 SQL 的终极指南
前端·数据库·sql·安全·ui·langchain·机器人
创码小奇客1 小时前
MongoDB 时间序列:解锁数据时光机的终极指南
java·mongodb·trae
静听夜半雨1 小时前
CANoe入门——3、新建LIN工程及LIN DataBase(LDF文件)的创建
网络·数据库·c++·编辑器