Mar*_*ing 11
这个问题真的很模糊.某些可能适用于您的内容(不按特定顺序排列):
最好用一个例子来说明:
{
surname: "Smith",
forename: "John",
location: { grid_e: 100.02, grid_n: 450.08 }
}
Run Code Online (Sandbox Code Playgroud)
可以通过删除各种字段名称中不必要的冗长来缩短之前的文档.
{
sn: "Smith",
fn: "John",
loc: { e: 100.02, n: 450.08 }
}
Run Code Online (Sandbox Code Playgroud)
这将为您节省非常小的空间,但它将乘以每个文档的大小(字段数)和文档数量(如果您有数百万,可能会变得很重要).这是一篇很好的帖子,讨论了这种方法的优缺点.
通过上限集合,您可以指定要存储的文档数量的限制.它以先进先出的方式工作(最旧的文档将被丢弃).如果您正在记录并希望存储最新的x
文档,则这尤其适用,但旧的文档没有相关性.
使用上限集合有一些注意事项.有关完整详细信息,请参阅MongoDB文档.
文档可以具有嵌入文档或与其他文档(在其他集合中)外键样式的关系.我们经常讨论 每种方法的优缺点,但最终您可以选择适合您的方法.
以博客为例,可能每篇博文都有作者.您可以在每个帖子中嵌入此作者信息,也可以选择将它们放在自己authors
或users
集合中.后一种方法可以节省空间,特别是如果许多用户经常发布许多帖子(而不仅仅是一两个).请注意,由于没有连接,您将需要额外的数据库调用.
除了嵌入文档之外,文档之间的关系可以通过几种方式完成.您可以像这样使用相关文档的ID(重用上面的博客示例):
{
_id: <whatever>,
title: "Document Relationships in MongoDB",
body: "bla bla bla bla",
// ...
user_id: <id of the user document>
}
Run Code Online (Sandbox Code Playgroud)
在users
集合中,相关文档将存在:
{
_id: <whatever>,
name: "Mark Embling",
email: "example@markembling.info",
///...
}
Run Code Online (Sandbox Code Playgroud)
这可能是最简单的关系方法(除了嵌入它们之外),但是完全由你自己在代码中维护它.您需要进行调用以在需要时抓取相关用户,并在可能需要时更新它.也就是说,我认为这种方法没有任何问题,并且已经看过几次使用它.
类似的方法是使用DBRef.这是描述如上所述关系的更正式的方法.您可以指定DBRef,而不仅仅是将其他文档的ID放入其中,DBRef是对另一个文档的一种引用,形式化.我希望这是有道理的.我在这里描述的两种方法都在mongodb文档中详细讨论过.值得注意的是,手动引用将占用(略微)比DBRef更小的空间,因为DBRef保存额外(可能是冗余的)信息,例如引用哪个集合.它具有许多驱动程序库本身支持的优点,因此它使您的生活更容易一些.
最终,哪些方法有效且相关取决于您正在尝试做什么.考虑选项,权衡并调用它是否应该做的事情.并试验.
归档时间: |
|
查看次数: |
2048 次 |
最近记录: |