MongoDB

MongoDB 是一种面向文档的 NoSQL 数据库,以高性能、灵活性和扩展性著称。它与传统的关系型数据库(如 MySQL)不同,使用的是非结构化的数据存储方式,非常适合需要快速开发和处理海量数据的场景。

核心概念:

  • 文档 (Document):MongoDB 中的记录,类似 JSON 格式。

  • 集合 (Collection):存储文档的容器,相当于关系型数据库的表。

  • 数据库 (Database):存储多个集合的容器。

  • BSON:MongoDB 存储数据的二进制格式,比 JSON 更高效。

  • _id:文档的唯一标识符,相当于主键。

"_id": {
    "$oid": "6561475ce1013330d1e3f2db"
  }

ObjectId 是一个12字节 BSON 类型数据,通常以24个十六进制数字的形式表示,有以下格式:

  • 前4个字节表示时间戳

  • 接下来的3个字节是机器标识码

  • 紧接的2个字节由进程id组成(PID)

  • 最后3个字节是随机数。

MongoDB中存储的文档必须有一个"_id"键。这个键的值可以是任何类型的,默认是个ObjectId对象。

在一个集合里面,每个文档都有唯一的"_id"值,来确保集合里面每个文档都能被唯一标识。

具体操作:

## 1. 数据库操作
# 切换到指定的数据库,如果数据库不存在会自动创建
use myDatabase

# 查看所有数据库
show dbs

# 删除当前所使用的数据库
db.dropDatabase()


## 2. 集合操作
# 查看当前数据库中的所有集合
show collections

# 创建集合
# 创建一个名为 "users" 的集合
db.createCollection("users")


# 删除集合
# 删除名为 "users" 的集合
db.users.drop()


## 3. 文档操作

### 插入文档
# 插入单个文档
db.users.insertOne({ name: "Alice", age: 25, hobbies: ["reading", "swimming"] })

# 插入多个文档
db.users.insertMany([
  { name: "Bob", age: 30, active: true },
  { name: "Charlie", age: 35, active: false }
])

### 查询文档
# 查询所有文档
db.users.find()

# 查询指定条件的文档
db.users.find({ age: { $gte: 30 } })  # 查询 age 大于等于 30 的文档

# 查询并只返回特定字段
db.users.find({ age: 30 }, { name: 1, _id: 0 })  # 返回 name 字段,隐藏 _id

# 查询单个文档
db.users.findOne({ active: true })

### 更新文档
# 更新单个文档,设置新的字段
db.users.updateOne(
  { name: "Alice" }, # 查询条件
  { $set: { city: "New York" } } # 更新内容
)

# 更新多个文档
db.users.updateMany(
  { age: { $lt: 35 } },  # 查询条件
  { $set: { status: "young" } } # 更新内容
)

# 替换整个文档
db.users.replaceOne(
  { name: "Charlie" },  # 查询条件
  { name: "Charlie", age: 36, active: true } # 新文档
)

### 删除文档
# 删除单个文档
db.users.deleteOne({ name: "Bob" })

# 删除多个文档
db.users.deleteMany({ age: { $lt: 35 } })


## 4. 索引操作
# 创建索引
# 在 name 字段上创建升序索引
db.users.createIndex({ name: 1 })

# 在多个字段上创建复合索引
db.users.createIndex({ name: 1, age: -1 })

# 查看集合的所有索引
db.users.getIndexes()

# 删除索引
db.users.dropIndex("name_1")


## 5. 聚合操作
# 聚合管道:过滤 + 分组
db.users.aggregate([
  { $match: { age: { $gte: 25 } } },  # 过滤条件
  { $group: { _id: "$status", total: { $sum: 1 } } }  # 按 status 分组并统计数量
])

# 聚合管道:排序 + 限制返回数量
db.users.aggregate([
  { $sort: { age: -1 } },  # 按 age 降序排序
  { $limit: 2 }  # 限制返回前 2 条记录
])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值