mongo语法(一)基本操作

MongoDB 使用 MongoDB 查询语言(MongoDB Query Language, MQL) ,它是基于 JSON 样式的文档和 BSON 数据结构的查询语言。MongoDB 的语法与传统的 SQL 不同,它基于 文档模型,而 SQL 基于关系模型,因此查询和操作 MongoDB 数据的方式也有所不同。

前提、操作符

1、比较操作符
  • $eq:等于

  • $ne:不等于

  • $gt:大于

  • $lt:小于

  • $gte:大于等于

  • $lte:小于等于

    db.myCollection.find({ age: { $gt: 30 } }) // 查询 age 大于 30 的文档

2、逻辑操作符
  • $and:与操作

  • $or:或操作

  • $nor:非操作

  • $not:否定操作

    db.myCollection.find({
    or: [{ age: { gt: 30 } }, { status: "active" }]
    })

3、结合操作符
  • $in:匹配数组中的值

  • $nin:不匹配数组中的值

  • $exists:检查字段是否存在

    db.myCollection.find({ age: { $in: [25, 30, 35] } })

4、字符串操作
  • $regex:正则表达式查询

  • $options:正则表达式的选项(例如,"i" 表示不区分大小写)

    db.myCollection.find({ name: { regex: "^John", options: "i" } })

5、数值操作
  • $size:匹配数组的大小

  • $all:匹配数组中的所有元素

  • $elemMatch:匹配数组中的元素

    db.myCollection.find({ tags: { $size: 3 } }) // 查找 tags 数组长度为 3 的文档

一、连接到mongo

使用 MongoDB Shell,连接到远程 MongoDB 实例:

复制代码
mongo --host <host> --port <port> -u <username> -p <password>

二、基本数据库操作

1、查看所有数据库
复制代码
show databases
2、创建数据库

在 MongoDB 中,数据库是 惰性创建 的,即在插入数据时数据库会自动创建。

复制代码
use myDatabase
3、切换到指定数据库
复制代码
use <databaseName>
4、查看当前数据库
复制代码
db
5、删除数据库
复制代码
db.dropDatabase()

三、集合操作

1、查看当前数据库的所有集合
复制代码
show collections
2、创建集合

MongoDB 会在插入数据时自动创建集合,但你也可以手动创建集合:

复制代码
db.createCollection("myCollection")
3、删除集合
复制代码
db.myCollection.drop()

四、文档增删查操作

1、插入单个文档
复制代码
db.myCollection.insertOne({
  name: "John Doe",
  age: 30,
  status: "active"
})
2、插入多个文档
复制代码
db.myCollection.insertMany([
  { name: "Alice", age: 28, status: "inactive" },
  { name: "Bob", age: 35, status: "active" }
])
3、更新单个文档
复制代码
db.myCollection.updateOne(
  { name: "John Doe" }, // 查找条件
  { $set: { age: 31 } }  // 更新操作
)
4、更新多个文档
复制代码
db.myCollection.updateMany(
  { status: "active" },
  { $set: { status: "inactive" } }
)
5、删除单个文档
复制代码
db.myCollection.deleteOne({ name: "John Doe" })

db.myCollection.deleteMany({ age: { $lt: 30 } })

五、文档查询操作

1、查询所有文档
复制代码
db.myCollection.find()
2、查询匹配条件的文档
复制代码
db.myCollection.find({ name: "John Doe" })
3、查询特定字段的文档
复制代码
db.myCollection.find({ age: 30 }, { name: 1, age: 1 })  // 返回 name 和 age 字段
4、查询条件与逻辑运算
复制代码
db.myCollection.find({ age: { $gt: 25 } })  // 查询 age > 25 的文档
5、聚合操作

MongoDB 使用 聚合管道 来执行复杂的查询和数据处理操作。聚合管道是按顺序连接的多个阶段,每个阶段处理数据并将结果传递给下一个阶段。

聚合操作符:

  • $match:筛选文档,类似于 find 查询。
  • $group:分组操作,可以计算总和、平均数、最大值等。
  • $sort:对结果排序。
  • $project:选择要显示的字段或添加新字段。
  • $limit:限制返回的文档数量。
  • $skip:跳过指定数量的文档。

demo:

复制代码
db.myCollection.aggregate([
  { $match: { status: "active" } },          // 第一个阶段:筛选 status 为 active 的文档
  { $group: { _id: "$age", total: { $sum: 1 } } }  // 第二个阶段:按年龄分组,统计每个年龄的总数
])

db.myCollection.aggregate([
  { $match: { status: "active" } },
  { $group: { _id: "$age", total: { $sum: 1 } } },
  { $sort: { total: -1 } },                  // 按 total 字段降序排序
  { $limit: 5 }                              // 返回前 5 条结果
])

六、索引操作

1、创建索引

(1)创建单字段索引

复制代码
db.myCollection.createIndex({ age: 1 })  // 升序索引

(2)创建复合索引

复制代码
db.myCollection.createIndex({ name: 1, age: -1 })  // name 升序,age 降序
2、查看索引
复制代码
db.myCollection.getIndexes()
3、删除索引
复制代码
db.myCollection.dropIndex("indexName")

七、事务操作

MongoDB 4.x 引入了对多文档事务的支持。事务允许在多个操作之间保持原子性。

复制代码
const session = db.getMongo().startSession();

session.startTransaction();
try {
  db.myCollection.insertOne({ name: "John Doe" }, { session });
  db.myCollection.updateOne({ name: "Alice" }, { $set: { status: "active" } }, { session });
  session.commitTransaction();  // 提交事务
} catch (error) {
  session.abortTransaction();  // 事务回滚
  throw error;
} finally {
  session.endSession();  // 结束会话
}

以上介绍的只是 MongoDB 语法的基础和常见操作,MongoDB 还提供了更多的高级功能,如全文索引、地理空间查询、数据导入导出等,开发者可以根据项目需求深入学习和使用。

相关推荐
知识分享小能手1 小时前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019数据库的操作(2)
数据库·学习·sqlserver
爬山算法1 小时前
Hibernate(84)如何在DevOps流程中使用Hibernate?
oracle·hibernate·devops
踩坑小念2 小时前
秒杀场景下如何处理redis扣除状态不一致问题
数据库·redis·分布式·缓存·秒杀
萧曵 丶2 小时前
MySQL 语句书写顺序与执行顺序对比速记表
数据库·mysql
Wiktok3 小时前
MySQL的常用数据类型
数据库·mysql
曹牧3 小时前
Oracle 表闪回(Flashback Table)
数据库·oracle
J_liaty4 小时前
Redis 超详细入门教程:从零基础到实战精通
数据库·redis·缓存
m0_706653234 小时前
用Python批量处理Excel和CSV文件
jvm·数据库·python
山岚的运维笔记4 小时前
SQL Server笔记 -- 第15章:INSERT INTO
java·数据库·笔记·sql·microsoft·sqlserver
Lw老王要学习5 小时前
CentOS 7.9达梦数据库安装全流程解析
linux·运维·数据库·centos·达梦