使用 MongoDB 基本数据类型

MongoDBMongoDBBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,你将学习如何在 MongoDB 中处理各种数据类型,包括数字、字符串、布尔值、日期和对象 ID。实验涵盖了如何存储、查询和操作 MongoDB 数据库中不同类型数据的实际示例。你将通过动手实践,掌握常见操作,并理解每种数据类型的适用场景。

实验分为五个主要步骤:处理数字、处理字符串数据、使用布尔值、存储日期和时间,以及管理对象 ID。每个步骤都提供了详细的讲解,演示了相关的 MongoDB 命令,并展示了各自数据类型的独特特性和应用场景。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mongodb(("MongoDB")) -.-> mongodb/BasicOperationsGroup(["Basic Operations"]) mongodb(("MongoDB")) -.-> mongodb/QueryOperationsGroup(["Query Operations"]) mongodb(("MongoDB")) -.-> mongodb/DataTypesGroup(["Data Types"]) mongodb/BasicOperationsGroup -.-> mongodb/insert_document("Insert Document") mongodb/BasicOperationsGroup -.-> mongodb/update_document("Update Document") mongodb/QueryOperationsGroup -.-> mongodb/find_documents("Find Documents") mongodb/QueryOperationsGroup -.-> mongodb/query_with_conditions("Query with Conditions") mongodb/DataTypesGroup -.-> mongodb/use_numeric_data_types("Use Numeric Data Types") mongodb/DataTypesGroup -.-> mongodb/use_string_data_types("Use String Data Types") subgraph Lab Skills mongodb/insert_document -.-> lab-422097{{"使用 MongoDB 基本数据类型"}} mongodb/update_document -.-> lab-422097{{"使用 MongoDB 基本数据类型"}} mongodb/find_documents -.-> lab-422097{{"使用 MongoDB 基本数据类型"}} mongodb/query_with_conditions -.-> lab-422097{{"使用 MongoDB 基本数据类型"}} mongodb/use_numeric_data_types -.-> lab-422097{{"使用 MongoDB 基本数据类型"}} mongodb/use_string_data_types -.-> lab-422097{{"使用 MongoDB 基本数据类型"}} end

处理数字

在这一步骤中,你将学习如何在 MongoDB 中处理数字数据类型,探索在数据库中存储和操作数字的不同方法。

理解 MongoDB 中的数字类型

MongoDB 支持多种数字数据类型,包括整数和浮点数。让我们从启动 MongoDB shell 并探索这些类型开始。

首先,打开终端并启动 MongoDB shell:

mongosh

接下来,创建一个数据库和集合来演示数字操作:

use numbers_lab
db.createCollection("products")

插入整数和小数

让我们添加一些包含不同数字类型的产品:

db.products.insertMany([
    {
        name: "Laptop",
        price: 999,           // 整数
        stock: 50,            // 整数
        discount: 0.1,        // 小数
        rating: 4.5           // 浮点数
    },
    {
        name: "Smartphone",
        price: 599,
        stock: 100,
        discount: 0.15,
        rating: 4.7
    }
])

示例输出

{
  acknowledged: true,
  insertedIds: {
    '0': ObjectId("..."),
    '1': ObjectId("...")
  }
}

数字操作

MongoDB 允许你执行各种数字操作。让我们演示一些操作:

// 查找价格大于 500 的产品
db.products.find({ price: { $gt: 500 } })

// 更新库存并增加
db.products.updateOne(
    { name: "Laptop" },
    { $inc: { stock: 10 } }
)

// 查找评分高于 4 的产品
db.products.find({ rating: { $gte: 4 } })

需要记住的关键点

  • 整数是没有小数点的整数
  • 浮点数可以包含小数位
  • MongoDB 使用 $gt(大于)、$lt(小于)、$inc(递增)进行数字操作

处理字符串数据

在这一步骤中,你将学习如何在 MongoDB 中处理字符串数据类型,探索在数据库中存储、查询和操作文本数据的不同方法。

理解 MongoDB 中的字符串类型

MongoDB 提供了强大的字符串处理能力。我们将继续使用上一步中创建的数据库来演示字符串操作。

首先,确保你已进入 MongoDB shell:

mongosh

切换到现有的数据库:

use numbers_lab

插入和查询字符串数据

让我们添加更多包含字符串字段的文档:

db.products.insertMany([
    {
        name: "Wireless Headphones",
        brand: "TechSound",
        description: "High-quality noise-canceling headphones",
        color: "Black",
        tags: ["electronics", "audio", "wireless"]
    },
    {
        name: "Smart Watch",
        brand: "FitTech",
        description: "Advanced fitness tracking smartwatch",
        color: "Silver",
        tags: ["wearables", "fitness", "technology"]
    }
])

字符串查询操作

MongoDB 提供了多种查询字符串数据的方式:

// 通过精确名称查找产品
db.products.find({ name: "Smart Watch" })

// 使用正则表达式进行不区分大小写的搜索
db.products.find({ brand: { $regex: /tech/i } })

// 在标签数组中搜索
db.products.find({ tags: "electronics" })

字符串操作方法

你还可以执行字符串操作:

// 更新描述
db.products.updateOne(
    { name: "Wireless Headphones" },
    { $set: { description: description.toUpperCase() } }
)

// 检查字符串长度
db.products.find({
    $expr: { $gt: [{ $strLenCP: "$name" }, 10] }
})

需要记住的关键点

  • MongoDB 中的字符串是 UTF-8 编码的
  • 使用 $regex 进行模式匹配
  • 数组可以包含字符串元素
  • MongoDB 支持多种字符串操作方法

使用布尔值

在这一步骤中,你将学习如何在 MongoDB 中处理布尔数据类型,探索如何在数据库中存储、查询和使用 true/false 值。

理解 MongoDB 中的布尔类型

布尔值对于表示数据中的 true/false 条件至关重要。我们将继续使用现有的数据库来演示布尔操作。

首先,确保你已进入 MongoDB shell:

mongosh

切换到现有的数据库:

use numbers_lab

插入包含布尔字段的文档

让我们添加一些包含布尔属性的产品:

db.products.insertMany([
    {
        name: "Premium Bluetooth Speaker",
        isWireless: true,
        isInStock: true,
        hasBluetooth: true,
        supportsBattery: true
    },
    {
        name: "Wired Gaming Headset",
        isWireless: false,
        isInStock: false,
        hasBluetooth: false,
        supportsBattery: false
    }
])

布尔查询操作

MongoDB 提供了强大的方式来查询布尔字段:

// 查找无线产品
db.products.find({ isWireless: true })

// 查找无库存的产品
db.products.find({ isInStock: false })

// 复杂的布尔查询
db.products.find({
    $and: [
        { isWireless: true },
        { hasBluetooth: true }
    ]
})

更新布尔值

你可以轻松更新布尔字段:

// 更新库存状态
db.products.updateOne(
    { name: "Wired Gaming Headset" },
    { $set: { isInStock: true } }
)

// 切换布尔值
db.products.updateOne(
    { name: "Premium Bluetooth Speaker" },
    { $not: { isWireless: true } }
)

需要记住的关键点

  • 布尔值只能是 truefalse
  • 使用逻辑运算符如 $and$or 进行复杂查询
  • 布尔字段适用于标志和状态跟踪
  • MongoDB 将布尔字段视为与其他数据类型相同

存储日期和时间

在这一步骤中,你将学习如何在 MongoDB 中处理日期和时间数据类型,探索存储、查询和操作时间数据的多种方法。

理解 MongoDB 中的日期类型

MongoDB 提供了强大的日期和时间处理能力。我们将继续使用现有的数据库来演示日期操作。

首先,确保你已进入 MongoDB shell:

mongosh

切换到现有的数据库:

use numbers_lab

插入包含日期字段的文档

让我们添加一些包含不同日期相关字段的产品:

db.products.insertMany([
    {
        name: "Laptop Pro",
        releaseDate: new Date(),
        lastUpdated: new Date(),
        warrantyExpiration: new Date("2025-12-31"),
        manufacturingDate: new Date("2023-01-15")
    },
    {
        name: "Smartphone Elite",
        releaseDate: new Date("2023-06-01"),
        lastUpdated: new Date(),
        warrantyExpiration: new Date("2024-06-01"),
        manufacturingDate: new Date("2023-05-15")
    }
])

日期查询操作

MongoDB 提供了复杂的日期查询功能:

// 查找在特定日期之后发布的产品
db.products.find({
    releaseDate: { $gt: new Date("2023-01-01") }
})

// 查找保修期在接下来一年内到期的产品
db.products.find({
    warrantyExpiration: {
        $gte: new Date(),
        $lt: new Date(new Date().setFullYear(new Date().getFullYear() + 1))
    }
})

// 获取在特定月份生产的产品
db.products.find({
    $expr: {
        $eq: [{ $month: "$manufacturingDate" }, 5]
    }
})

日期操作方法

你可以执行各种与日期相关的操作:

// 更新最后更新日期
db.products.updateOne(
    { name: "Laptop Pro" },
    { $currentDate: { lastUpdated: true } }
)

// 为日期添加天数
db.products.updateOne(
    { name: "Smartphone Elite" },
    {
        $set: {
            extendedWarranty: new Date(
                new Date("2024-06-01").setDate(
                    new Date("2024-06-01").getDate() + 30
                )
            )
        }
    }
)

需要记住的关键点

  • MongoDB 将日期存储为完整的日期对象
  • 使用 new Date() 创建当前时间戳
  • 使用比较运算符比较日期
  • MongoDB 提供了提取日期组件的方法
  • 日期默认以 UTC 格式存储

管理 ObjectId

在这一步骤中,你将学习 MongoDB 中的 ObjectId,了解它们如何作为唯一标识符工作,以及如何在数据库中操作它们。

理解 MongoDB 中的 ObjectId

ObjectId 是 MongoDB 为每个文档自动生成的特殊标识符。我们将探索它们的特性和用法。

首先,确保你已进入 MongoDB shell:

mongosh

切换到现有的数据库:

use numbers_lab

创建和检查 ObjectId

让我们插入文档并检查它们的唯一标识符:

// 插入一个文档并观察其 ObjectId
db.users.insertOne({
    username: "johndoe",
    email: "[email protected]",
    registrationDate: new Date()
})

// 检索插入的文档
const newUser = db.users.findOne({ username: "johndoe" })

ObjectId 属性和方法

ObjectId 包含一些有趣的属性:

// 获取 ObjectId 的时间戳
const timestamp = newUser._id.getTimestamp()
print("Document created at:", timestamp)

// 生成一个新的 ObjectId
const customId = new ObjectId()
print("Custom ObjectId:", customId)

在查询中使用 ObjectId

你可以使用 ObjectId 进行精确的文档检索:

// 通过确切的 ObjectId 查找文档
db.users.findOne({ _id: newUser._id })

// 检查 ObjectId 是否有效
const isValid = ObjectId.isValid(newUser._id)
print("Is ObjectId valid?", isValid)

高级 ObjectId 操作

MongoDB 提供了提取和操作 ObjectId 的方法:

// 比较 ObjectId
const anotherUser = db.users.insertOne({
    username: "janedoe",
    email: "[email protected]"
})

// 检查一个 ObjectId 是否早于另一个
const isEarlier = newUser._id < anotherUser.insertedId
print("Is first user's ID earlier?", isEarlier)

需要记住的关键点

  • ObjectId 是唯一的 12 字节标识符
  • 它们包含时间戳、机器标识符、进程 ID 和随机值
  • 如果未指定,每个文档都会自动获得一个 ObjectId
  • ObjectId 可用于排序和跟踪文档创建时间

总结

在本实验中,你学习了如何在 MongoDB 中处理不同的数值数据类型,包括整数和浮点数。你探索了插入、查询和更新数值数据的方法,使用了诸如 $gt$lt$inc 等操作符。此外,你还掌握了如何处理字符串数据、使用布尔值、存储日期和时间信息,以及管理 MongoDB 数据库中的 ObjectId。

你还学习了如何执行各种字符串操作,例如查询、更新和操作文本数据。本实验涵盖了 MongoDB 提供的不同字符串相关操作符和方法的用法,以帮助你在应用程序中有效地处理文本信息。