用于时间跟踪的MongoDB模式设计

时间:2015-03-17 14:36:07

标签: node.js mongodb database-design mongoose nosql

我创建了一个简单的时间跟踪应用程序,人们可以使用TimeIn,TimeOut和标记符。此跟踪的核心对象是用户生成的事件。这与 UserStatus 结合使用可确保状态管理正确无误。以下是减去 updatedAt createdAt 字段的模式:

{
  userId: { type   : mongoose.Schema.Types.ObjectId, required: true },
  localTime:  {type: Date},
  userEmail: { type: String, required: true },
  type: { type   : String, required: true },
  ip: { type   : String, required: false }
}

现在我正在尝试创建一个days事件的聚合。我脑海中的字段是totalWorkTime,totalBreakTime(以秒为单位),noOfBreaks,但我试图解决的情况是用户忘记超时。请考虑:

  • 用户远在美国和马尼拉。
  • 用户没有分配任何时间段。
  • 所以也许他们可以在当地时间晚上11点到凌晨3点工作。
  • 如何将上述情况与缺失超时区分开来,并且与当地时区非常吻合。
  • 存储当地时间聪明吗?反对存储UTC。

主要思想是在第二天晚上11:59和第二天凌晨12:00定时和超时。但它很适合。任何有关Schema或建议架构的帮助都会有所帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

以UTC及其时区偏移量存储时间。

<div class="unclick--header">
	<div class="logo--holder"><h1>Logo</h1></div>
	 <div class="mousewrapper"><svg xmlns="http://www.w3.org/2000/svg" width="30" height="50" viewBox="0 0 30 57.1"><title>mouse - final</title><path id="mouse-body" d="M31 45.1L31 45.1c0 0.1 0 0.1 0 0.2 0 6-6.7 10.8-15 10.8S1 51.3 1 45.3c0-0.1 0-0.1 0-0.2l0 0V11.8l0 0C1 5.8 7.7 1 16 1s15 4.8 15 10.8l0 0V45.1z" style="fill:none;stroke-linejoin:round;stroke-width:2;stroke:#000"/><circle id="mouse-topcircle" cx="16" cy="10.9" r="2.8"/><path id="mouse-triangle" d="M16.9 47.2l2.9-5c0.4-0.7-0.1-1.5-0.9-1.5h-5.7c-0.8 0-1.3 0.8-0.9 1.5l2.9 5C15.5 47.9 16.5 47.9 16.9 47.2z"/></svg>
  </div>
  <div id="unclick--desktopmenubutton">
    <div class="unclick--desktopmenu-word">Menu</div>
    <div class="bar bar1"></div>
    <div class="bar bar2"></div>
    <div class="bar bar3"></div>
  </div>
</div>