筑基期

1. 什么是 MongoDB?它与传统关系型数据库有何不同?

MongoDB 是一个开源的、面向文档的 NoSQL 数据库,它以 JSON 风格的 BSON(Binary JSON)格式存储数据,能够处理大规模的非结构化数据。

与传统的关系型数据库(如 MySQLPostgreSQL)相比,MongoDB 的主要区别在于:

  • 文档存储MongoDB 使用文档而非表格结构,数据被存储为键值对,适合存储复杂的、非结构化数据。

  • 无固定模式MongoDB 不需要预定义数据表的结构(即无固定模式),可以灵活地在同一个集合中存储结构不同的文档。

  • 横向扩展MongoDB 通过分片实现水平扩展,适合大数据量和分布式系统。

  • 内置支持的副本集MongoDB 原生支持数据的高可用性,通过复制集来保障数据的冗余备份。


2. MongoDB 中的文档(Document)和集合(Collection)是什么?

MongoDB 中文档 是基本的存储单元,类似于关系型数据库中的行。

每个文档由多个键值对组成,数据存储格式为 BSON(类似于 JSON)。

集合 是一组相关联的文档,类似于关系型数据库中的表。

集合中的文档可以具有不同的字段或数据类型,这使得 MongoDB 灵活且适合存储非结构化数据。

示例文档

{
  "name": "Alice",
  "age": 30,
  "skills": ["Java", "MongoDB"]
}

集合 可以存储多个类似的文档。


3. 如何在 MongoDB 中创建数据库和集合?

MongoDB 不需要显式创建数据库和集合。当第一次在数据库中插入数据时,MongoDB 会自动创建相应的数据库和集合。

创建数据库

MongoDB 中,切换数据库的命令会自动创建该数据库:

use my_database

创建集合

MongoDB 不要求显式创建集合,向集合插入文档时,MongoDB 会自动创建该集合。

db.my_collection.insert({ name: "Alice", age: 30 })

如果 my_collection 之前不存在,MongoDB 会在第一次插入文档时创建该集合。


4. MongoDB 中有哪些常见的数据类型?

  • String:字符串类型,常用于存储文本。

  • Number

    • Integer:整数类型,可以是 32 位或 64 位。
    • Double:双精度浮点数。
  • Boolean:布尔类型,用于表示 truefalse

  • Date:日期类型,MongoDB 使用 ISODate() 存储日期。

  • Array:数组类型,用于存储多个值。

  • Object:嵌套文档,存储复杂的数据结构。

  • ObjectId:每个文档的唯一 ID,默认 _id 字段是一个 ObjectId

示例文档

{
  "_id": ObjectId("5f50c31e7c34d2e48c8514f4"),
  "name": "Bob",
  "age": 25,
  "is_active": true,
  "created_at": ISODate("2023-01-01T12:00:00Z")
}

5. 如何在 MongoDB 中插入、查询、更新和删除文档?

插入文档

db.users.insert({ name: "Alice", age: 30 })

users 集合中插入一个新文档。

查询文档

db.users.find({ name: "Alice" })

查询 users 集合中 name"Alice" 的文档。

更新文档

db.users.update({ name: "Alice" }, { $set: { age: 31 } })

name"Alice" 的文档中的 age 更新为 31

删除文档

db.users.remove({ name: "Alice" })

删除 users 集合中 name"Alice" 的文档。


6. 什么是 MongoDB 的索引?如何创建和使用索引?

索引MongoDB 提高查询性能的关键机制。通过为集合字段创建索引,MongoDB 可以加快查询速度,类似于关系型数据库中的索引。

创建索引

db.users.createIndex({ name: 1 })

users 集合中的 name 字段创建升序索引。1 表示升序,-1 表示降序。

使用索引的好处

  • 索引能加速查询操作,尤其是在大规模数据集合上。

  • 对常用的查询字段创建索引,可以显著提高性能。

查询使用索引

db.users.find({ name: "Alice" }).explain("executionStats")

使用 explain() 命令查看查询是否使用了索引。


7. 如何在 MongoDB 中查询数组字段中的数据?

MongoDB 提供了对数组的强大支持,可以直接查询数组字段中的元素。

查询数组字段中的元素

db.users.find({ skills: "MongoDB" })

查询 users 集合中 skills 数组字段包含 "MongoDB" 的文档。

查询数组中的特定元素位置

db.users.find({ "skills.0": "Java" })

查询 users 集合中,skills 数组第一个元素为 "Java" 的文档。

查询数组中多个条件

db.users.find({ skills: { $all: ["Java", "MongoDB"] } })

查询 skills 数组中同时包含 "Java""MongoDB" 的文档。

results matching ""

    No results matching ""