介绍
在本实验中,你将学习如何在 MongoDB 中处理各种数据类型,包括数字、字符串、布尔值、日期和对象 ID。实验涵盖了如何存储、查询和操作 MongoDB 数据库中不同类型数据的实际示例。你将通过动手实践,掌握常见操作,并理解每种数据类型的适用场景。
实验分为五个主要步骤:处理数字、处理字符串数据、使用布尔值、存储日期和时间,以及管理对象 ID。每个步骤都提供了详细的讲解,演示了相关的 MongoDB 命令,并展示了各自数据类型的独特特性和应用场景。
在本实验中,你将学习如何在 MongoDB 中处理各种数据类型,包括数字、字符串、布尔值、日期和对象 ID。实验涵盖了如何存储、查询和操作 MongoDB 数据库中不同类型数据的实际示例。你将通过动手实践,掌握常见操作,并理解每种数据类型的适用场景。
实验分为五个主要步骤:处理数字、处理字符串数据、使用布尔值、存储日期和时间,以及管理对象 ID。每个步骤都提供了详细的讲解,演示了相关的 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 } })
$gt
(大于)、$lt
(小于)、$inc
(递增)进行数字操作在这一步骤中,你将学习如何在 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] }
})
$regex
进行模式匹配在这一步骤中,你将学习如何在 MongoDB 中处理布尔数据类型,探索如何在数据库中存储、查询和使用 true/false 值。
布尔值对于表示数据中的 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 } }
)
true
或 false
$and
、$or
进行复杂查询在这一步骤中,你将学习如何在 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
)
)
}
}
)
new Date()
创建当前时间戳在这一步骤中,你将学习 MongoDB 中的 ObjectId,了解它们如何作为唯一标识符工作,以及如何在数据库中操作它们。
ObjectId 是 MongoDB 为每个文档自动生成的特殊标识符。我们将探索它们的特性和用法。
首先,确保你已进入 MongoDB shell:
mongosh
切换到现有的数据库:
use numbers_lab
让我们插入文档并检查它们的唯一标识符:
// 插入一个文档并观察其 ObjectId
db.users.insertOne({
username: "johndoe",
email: "[email protected]",
registrationDate: new Date()
})
// 检索插入的文档
const newUser = db.users.findOne({ username: "johndoe" })
ObjectId 包含一些有趣的属性:
// 获取 ObjectId 的时间戳
const timestamp = newUser._id.getTimestamp()
print("Document created at:", timestamp)
// 生成一个新的 ObjectId
const customId = new ObjectId()
print("Custom ObjectId:", customId)
你可以使用 ObjectId 进行精确的文档检索:
// 通过确切的 ObjectId 查找文档
db.users.findOne({ _id: newUser._id })
// 检查 ObjectId 是否有效
const isValid = ObjectId.isValid(newUser._id)
print("Is ObjectId valid?", isValid)
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)
在本实验中,你学习了如何在 MongoDB 中处理不同的数值数据类型,包括整数和浮点数。你探索了插入、查询和更新数值数据的方法,使用了诸如 $gt
、$lt
和 $inc
等操作符。此外,你还掌握了如何处理字符串数据、使用布尔值、存储日期和时间信息,以及管理 MongoDB 数据库中的 ObjectId。
你还学习了如何执行各种字符串操作,例如查询、更新和操作文本数据。本实验涵盖了 MongoDB 提供的不同字符串相关操作符和方法的用法,以帮助你在应用程序中有效地处理文本信息。