Mongodb Mongo中的规范化/子对象

Mongodb Mongo中的规范化/子对象,mongodb,Mongodb,对于Mongodb来说有点陌生,有一个关于如何正确存储数据的问题 我正在进行域搜索/历史POC,不确定如何存储数据。如果是mySQL,我会有以下表格 域名-域名和当前状态 域\更新-域的外键,将存储whois信息 { domain: 'blah.com', status: 'registered', updates: [ { owner: 'john smith', status: 'expiration',

对于Mongodb来说有点陌生,有一个关于如何正确存储数据的问题

我正在进行域搜索/历史POC,不确定如何存储数据。如果是mySQL,我会有以下表格

域名-域名和当前状态 域\更新-域的外键,将存储whois信息

{
   domain: 'blah.com',
   status: 'registered',
   updates: [
       {
           owner: 'john smith',
           status: 'expiration',
           date: somedategoeshere
       },
       {
           status: 'available',
           date:'somedategoeshere'
       }
   ]
}

如果每个域有数百个或数千个更新,MongoDB的这种格式会持续吗?

取决于您是否希望快速搜索更新字段。你打算给它编索引吗? 如果是,则updates[]数组的全部内容都将在索引中结束

如果索引包含数组值的字段,则MongoDB 为数组的每个元素创建单独的索引项。这些 多键索引允许查询选择包含数组的文档 通过匹配数组的一个或多个元素。蒙哥达 如果 索引字段包含一个数组值;您不需要显式地 指定多键类型

资料来源:


如果您对更平坦的索引感兴趣(可能),那么最好将域密钥注入更新文档并将其存储在单独的集合中。

我认为使用第二种解决方案对我来说是最好的。使用“外键”(注入域\ U键)的多个集合。感谢您的好意,请注意,这种关系方法将迫使您手动进行连接。如果你的应用程序中有很多这样的东西,你最好用“非sql方式”设计你的模式,即嵌入和非规范化,或者使用关系sql数据库。答案并不是那么简单,我建议您阅读各种“mongodb模式设计”主题,它们有很多。
Multikey Index

MongoDB uses multikey indexes to index the content stored in arrays.