在MongoDB中存储日期数组

时间:2013-07-09 10:58:11

标签: mongodb database-design database

出于学习目的,我正在构建一个具有基本功能的应用程序。这是我第一次使用MongoDB,我想知道我的数据模型是否有意义,或者我是否应该以不同的方式对其进行建模。

基本上,这是应该发生的事情:

我有用户帐户,他们可以创建“任务”并执行它们。每次执行任务时,都应记录时间戳。然后,他们可以查看日志(日志),该日志显示他们执行特定任务的所有日期。

我的数据模型看起来像这样。这有意义吗? 我特别想知道一系列日期 - 这是正确的方法吗? (log-Array可能会变得很长)

{
    _id: "51d951922cf9f30200000004",
    user: "jon doe",
    password: "xxxxxxxxxx",
    tasks: [
        {
            name: "one task",
            log: [
                ISODate("2010-10-10T20:55:36Z"),
                ISODate("2011-10-10T20:55:36Z"),
                ISODate("2012-10-10T20:55:36Z")
            ]
        },
        {
            name: "another task",
            log: [
                ISODate("2010-10-10T20:55:36Z"),
                ISODate("2011-10-10T20:55:36Z"),
                ISODate("2012-10-10T20:55:36Z")
            ]
        },
        {
            name: "one last task",
            log: [
                ISODate("2010-10-10T20:55:36Z"),
                ISODate("2011-10-10T20:55:36Z"),
                ISODate("2012-10-10T20:55:36Z")
            ]
        }
    ]
}

1 个答案:

答案 0 :(得分:0)

你所拥有的可能很好。随着阵列大小的增加,您可能会在复制大型阵列时遇到一些延迟,但对于日志来说,实际上并没有节省空间的替代方案。我唯一能想到的是嵌套文档。一旦尺寸很大,这可能会稍微更快一点,但它将占用更多的空间,并且不会那么好或可读。您可以拥有类似

的文档,而不是拥有日志数组
{ 0: ISODate("2010-10-10T20:55:36Z" , 
  1: ISODate("2010-10-10T20:55:36Z" , 
  2: ISODate("2010-10-10T20:55:36Z" }

等。这将比添加日志时创建一个全新的(更大的)数组更新,但也会占用更多空间。

如果有帮助,MongoDB有一个关于数据建模的页面,其中包含一些您可能会觉得有用的链接。 http://docs.mongodb.org/manual/core/data-modeling/