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

相关推荐
月光水岸New1 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6751 小时前
数据库基础1
数据库
我爱松子鱼1 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo2 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser3 小时前
【SQL】多表查询案例
数据库·sql
Galeoto3 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)3 小时前
MySQL主从架构
服务器·数据库·mysql
leegong231113 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql
喝醉酒的小白3 小时前
PostgreSQL:更新字段慢
数据库·postgresql
敲敲敲-敲代码3 小时前
【SQL实验】触发器
数据库·笔记·sql