当您使用 MongoDB,尤其是从关系型数据库转过来的开发者时,首先会注意到的一点就是其架构设计的高度灵活。
MongoDB 中的集合无需事先显式创建,但在某些情况下,提前明确定义并细致配置会更合适。
本文将介绍在 MongoDB 中如何以及何时创建集合、需要考虑的一些关键配置选项,并提供 JS 和 C#(我的最爱)的代码示例。
别担心,各驱动之间的特性有很高的一致性,因此您今天在此看到的多数内容,也都可以在 <insert your language of choice> 中实现。
如果您刚接触 NoSQL 数据库,不妨先从 Introduction to NoSQL开始。
什么是 MongoDB 集合?
在了解如何创建集合之前,我们先简要讨论一下集合究竟是什么。
如果您来自 SQL 背景,可能更熟悉表、行和列。在 MongoDB 中,术语稍有不同:我们使用集合(而非表),使用包含字段的文档(而非行和列)。
MongoDB 的一大超能力是其动态架构。这意味着您无需在使用前手动创建集合。如果您向一个尚不存在的集合插入文档,MongoDB 会自动创建它。例如,如果您运行:
db.movies.insertOne({ title: "The Matrix", year: 1999 });
它会尝试向 movies 集合插入一条关于电影“The Matrix”的文档。如果该集合已存在,文档会被添加进去;如果不存在,则会先创建 movies 集合,然后再添加新文档。
您也可以使用 insertMany 一次性添加多条文档,而非 insertOne。
何时应显式定义 MongoDB 集合
尽管您可以让 MongoDB 自动创建集合,但在生产环境中,提前显式定义集合有很多好处。显式创建集合使您能够:
以下是在MongoDB Shell中创建集合的方法:
db.createCollection("auditLogs", {
capped: true,
size: 10485760,
max: 1000
});技术支持
或者带有验证:
db.createCollection("users", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["email", "createdAt"],
properties: {
email: {
bsonType: "string",
pattern: "^.+@.+$"
},
createdAt: {
bsonType: "date"
}
}
}
}
});
技术支持
尽管 MongoDB 支持灵活架构,您可能仍希望添加验证规则,例如必填字段,或对特定字段指定属性(如数据类型或电子邮件格式),就像上面所示。如果您希望确保文档遵循特定架构,这会很有用。
如果您来自 SQL 背景,强制执行架构会让您倍感熟悉;即便不是,有时生产环境下的应用也需要结构可预测的文档。因此,验证在这方面非常出色!
使用 C# 驱动创建 MongoDB 集合
在 C# 应用中,您也可以使用 MongoDB 驱动显式创建集合。虽然基本操作不要求这样做,但这正是您以编程方式设置高级选项的场景。
var options = new CreateCollectionOptions
{
Capped = true,
MaxSize = 10485760,
MaxDocuments = 1000
};
await database.CreateCollectionAsync("auditLogs", options);技术支持
添加验证器:
var validator = new BsonDocument
{
{ "$jsonSchema", new BsonDocument
{
{ "bsonType", "object" },
{ "required", new BsonArray { "email", "createdAt" } },
{ "properties", new BsonDocument
{
{ "email", new BsonDocument
{
{ "bsonType", "string" },
{ "pattern", "^.+@.+$" }
}
},
{ "createdAt", new BsonDocument
{
{ "bsonType", "date" }
}
}
}
}
}
}
};
var collectionOptions = new CreateCollectionOptions<BsonDocument>
{
Validator = new BsonDocumentFilterDefinition<BsonDocument>(validator)
};
await database.CreateCollectionAsync("users", collectionOptions);技术支持
对 Python 开发者而言, Introduction to MongoDB and Python 教程是很好的资源。
需要了解的关键集合配置选项
当您显式创建集合时,以下选项值得了解:
capped:创建固定大小集合
size:固定大小集合的最大字节数
max:允许的最大文档数量
validator:采用架构语法的 JSON 对象,用于定义架构验证
expireAfterSeconds:与 TTL 索引配合使用,以自动删除文档
您还可以在创建时或稍后应用索引。除非是 _id 所必需,否则 MongoDB 不会自动创建索引。
MongoDB 中的索引可以提升最常访问字段的性能。它们会将这些值缓存到内存中,意味着无需进行硬盘读取;在经常访问这些字段时,这能显著节省时间并提升性能。
定义 MongoDB 集合的最佳实践
以下是一些指导方针,帮助您判断何时应显式定义集合:
- 当进行快速概念验证或本地开发,或当终端用户能够动态生成内容时,使用隐式创建
- 当您希望应用验证,或为索引与性能设置参数时,使用显式创建
总结
MongoDB 以其灵活架构而闻名,这为我们组织数据方式带来灵活性,也包括如何创建和管理集合。隐式创建快捷方便,而显式定义集合则可解锁诸如架构验证、固定大小行为以及性能调优等强大功能。
一如既往,MongoDB Atlas 通过基于 UI 的工具、自动化与内置性能洞察,让集合管理更加轻松。而如果您使用 .NET,C# 驱动提供强类型模型与流式 API,能很好地满足需求。
在考虑定义 MongoDB 集合的最佳实践时,理解基础 database design 原则也会有所裨益。
祝您编码愉快!愿您的集合高速、合规且索引良好!
当您使用 MongoDB,尤其是从关系型数据库转过来的开发者时,首先会注意到的一点就是其架构设计的高度灵活。
MongoDB 中的集合无需事先显式创建,但在某些情况下,提前明确定义并细致配置会更合适。
本文将介绍在 MongoDB 中如何以及何时创建集合、需要考虑的一些关键配置选项,并提供 JS 和 C#(我的最爱)的代码示例。
别担心,各驱动之间的特性有很高的一致性,因此您今天在此看到的多数内容,也都可以在 <insert your language of choice> 中实现。
如果您刚接触 NoSQL 数据库,不妨先从 Introduction to NoSQL开始。
什么是 MongoDB 集合?
在了解如何创建集合之前,我们先简要讨论一下集合究竟是什么。
如果您来自 SQL 背景,可能更熟悉表、行和列。在 MongoDB 中,术语稍有不同:我们使用集合(而非表),使用包含字段的文档(而非行和列)。
MongoDB 的一大超能力是其动态架构。这意味着您无需在使用前手动创建集合。如果您向一个尚不存在的集合插入文档,MongoDB 会自动创建它。例如,如果您运行:
db.movies.insertOne({ title: "The Matrix", year: 1999 });它会尝试向
movies集合插入一条关于电影“The Matrix”的文档。如果该集合已存在,文档会被添加进去;如果不存在,则会先创建movies集合,然后再添加新文档。您也可以使用
insertMany一次性添加多条文档,而非insertOne。何时应显式定义 MongoDB 集合
尽管您可以让 MongoDB 自动创建集合,但在生产环境中,提前显式定义集合有很多好处。显式创建集合使您能够:
以下是在MongoDB Shell中创建集合的方法:
或者带有验证:
尽管 MongoDB 支持灵活架构,您可能仍希望添加验证规则,例如必填字段,或对特定字段指定属性(如数据类型或电子邮件格式),就像上面所示。如果您希望确保文档遵循特定架构,这会很有用。
如果您来自 SQL 背景,强制执行架构会让您倍感熟悉;即便不是,有时生产环境下的应用也需要结构可预测的文档。因此,验证在这方面非常出色!
使用 C# 驱动创建 MongoDB 集合
在 C# 应用中,您也可以使用 MongoDB 驱动显式创建集合。虽然基本操作不要求这样做,但这正是您以编程方式设置高级选项的场景。
添加验证器:
对 Python 开发者而言, Introduction to MongoDB and Python 教程是很好的资源。
需要了解的关键集合配置选项
当您显式创建集合时,以下选项值得了解:
capped:创建固定大小集合size:固定大小集合的最大字节数max:允许的最大文档数量validator:采用架构语法的 JSON 对象,用于定义架构验证expireAfterSeconds:与 TTL 索引配合使用,以自动删除文档您还可以在创建时或稍后应用索引。除非是
_id所必需,否则 MongoDB 不会自动创建索引。MongoDB 中的索引可以提升最常访问字段的性能。它们会将这些值缓存到内存中,意味着无需进行硬盘读取;在经常访问这些字段时,这能显著节省时间并提升性能。
定义 MongoDB 集合的最佳实践
以下是一些指导方针,帮助您判断何时应显式定义集合:
总结
MongoDB 以其灵活架构而闻名,这为我们组织数据方式带来灵活性,也包括如何创建和管理集合。隐式创建快捷方便,而显式定义集合则可解锁诸如架构验证、固定大小行为以及性能调优等强大功能。
一如既往,MongoDB Atlas 通过基于 UI 的工具、自动化与内置性能洞察,让集合管理更加轻松。而如果您使用 .NET,C# 驱动提供强类型模型与流式 API,能很好地满足需求。
在考虑定义 MongoDB 集合的最佳实践时,理解基础 database design 原则也会有所裨益。
祝您编码愉快!愿您的集合高速、合规且索引良好!