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 还提供了更多的高级功能,如全文索引、地理空间查询、数据导入导出等,开发者可以根据项目需求深入学习和使用。

相关推荐
SelectDB技术团队1 分钟前
Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
数据库·数据仓库·数据分析·apache doris·菜鸟技术
星空下的曙光21 分钟前
mysql 命令语法操作篇 数据库约束有哪些 怎么使用
数据库·mysql
小楓120123 分钟前
MySQL數據庫開發教學(一) 基本架構
数据库·后端·mysql
染落林间色31 分钟前
达梦数据库-实时主备集群部署详解(附图文)手工搭建一主一备数据守护集群DW
数据库·sql
颜颜yan_1 小时前
企业级时序数据库选型指南:从传统架构向智能时序数据管理的转型之路
数据库·架构·时序数据库
lichenyang4531 小时前
管理项目服务器连接数据库
数据库·后端
沙振宇1 小时前
【数据库】通过‌phpMyAdmin‌管理Mysql数据
数据库·mysql
杨云龙UP2 小时前
CentOS Linux 7 (Core)上部署Oracle 11g、19C RAC详细图文教程
数据库·oracle
ezl1fe2 小时前
RAG 每日一技(十八):手写SQL-RAG太累?LangChain的SQL智能体(Agent)前来救驾!
数据库·人工智能·后端
小咖张2 小时前
spring声明式事务,finally 中return对事务回滚的影响
数据库·java 声明式事务