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

相关推荐
GUIQU.2 分钟前
【MySQL】函数
数据库·mysql
chennalC#c.h.JA Ptho26 分钟前
kubuntu系统详解
linux·数据库·经验分享·postgresql·系统安全
DavieLau40 分钟前
Python开发后端InfluxDB数据库测试接口
服务器·数据库·python·时序数据库
悟能不能悟41 分钟前
关于 javax.validation.constraints的详细说明
数据库·mysql
.生产的驴1 小时前
Docker 部署Nexus仓库 搭建Maven私服仓库 公司内部仓库
java·运维·数据库·spring·docker·容器·maven
知行021 小时前
MySQL的Docker版本,部署在ubantu系统
数据库·mysql·docker
朝新_1 小时前
【MySQL】第三弹——表的CRUD进阶(一)数据库约束
数据库·mysql
qq_14182697322 小时前
python通过curl访问deepseek的API调用案例
java·数据库·python
可喜~可乐2 小时前
C# SQLite高级功能示例
数据库·sql·sqlite·c#
cooldream20093 小时前
深入理解主从数据库架构与主从复制
数据库·oracle·数据库架构·系统架构师