📚 技巧和诀窍: MongoDB 属性模式 💻
Danny Chan
Posted on August 6, 2024
情况:
- 单一视图应用程序 🔍
- 融合任何类型的数据 🌐
- 动态模式以便迭代 🔀
- 表达性查询语言、索引和聚合以查找和过滤数据 🔍
挑战:
- 多样的数据类型:从不同系统中协调模式很困难 🤯
- rigid 模式:无法更改模式 📛
缺点:
- 只能有细粒度的数据模式 📋
- 无法添加临时查询 🚫
- 无法添加辅助索引 🚫
解决方案: MongoDB 文档模型 💥
- 使用任何类型的数据(数字、字符串、二进制数据、数组) 🔢🔤🔣🔢
- 动态模式:不需要所有字段都一样 🔀
- 查询示例:索引以查找和过滤数据 🔍
- 索引: pet
{
"name": "Peter"
}
{
"name": "Mary",
"pet": "cat"
}
结果:
- 只能查询 Mary,因为她在索引中有 pet 😕
属性模式: 🔑
- 子集:包含许多相似字段的大型文档 📜
- 将子集数据移动到键值子文档中 📂
- 在少量文档的子集中对字段进行排序 🗂️
优势:
- 避免创建大量索引并减少性能 💪
属性模式用例 1:保险公司 🏦
- 将数据从多个来源聚合到一个中心位置 🌐
- 获得客户的 360°视图 🔍
- 以较低的成本提供更好的客户服务 💰
- 快速创新 🚀
之前:
{
release_Italy: ISODate("1977-10-20T01:00:00+01:00"),
release_France: ISODate("1977-10-19T01:00:00+01:00"),
release_UK: ISODate("1977-12-27T01:00:00+01:00"),
}
索引:
{release_Italy: 1}
{release_France: 1}
{release_UK: 1}
之后:
{
releases: [
{
location: "USA",
date: ISODate("1977-05-20T01:00:00+01:00")
},
{
location: "France",
date: ISODate("1977-10-19T01:00:00+01:00")
}
],
}
索引:
{ "releases.location": 1, "releases.date": 1}
非确定性命名: 🔖
- 轻松添加额外的限定符 🔍
- 明确说明原始字段和值的关系 📝
{
"specs": [
{ k: "volume", v: "500", u: "ml" },
{ k: "volume", v: "12", u: "ounces" }
]
}
索引:
{"specs.k": 1, "specs.v": 1, "specs.u": 1}
属性模式用例 2:服装 👕
- 以 small、medium、large 表示尺寸 📏
- 部分服装系列以数字表示(11、12、13) 🔢
- 特征很少在资产中共同存在 🎨
产品目录中有相似的属性,如名称、供应商、制造商、原产地 🏭
- 为数据提供良好的结构 🗂️
{
"specs": [
{ k: "size", v: "11", u: "CHINA" },
{ k: "size", v: "large", u: "USA" }
]
}
索引:
{"specs.k": 1, "specs.v": 1, "specs.u": 1}
Reference:
https://www.mongodb.com/developer/products/mongodb/attribute-pattern/
Building with Patterns: The Attribute Pattern
https://www.mongodb.com/solutions/use-cases/single-view
Single View applications
https://www.mongodb.com/blog/post/building-with-patterns-a-summary
Building with Patterns: A Summary
https://www.mongodb.com/blog/post/building-with-patterns-the-approximation-pattern
Building with Patterns: The Approximation Pattern
Editor
Danny Chan, specialty of FSI and Serverless
Kenny Chan, specialty of FSI and Machine Learning
Posted on August 6, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.