如何只用猫鼬保存日期部分,而不是 ISODate 格式

Sau*_*abh 5 mongoose mongodb node.js

如何使用 mongoose schmea 仅保存日期部分。目前我的模型是这样的:

myDate: { type: Date}

"2016-02-27T00:00:00.000Z"即使我只通过:“2016-02-27”也能保存日期。

num*_*8er 5

我在用着:

dateOfBirth: { type: Object }
Run Code Online (Sandbox Code Playgroud)

并保存如下:

dateOfBirth: {year: 1988, month: 0, day: 8}
Run Code Online (Sandbox Code Playgroud)

这给了我:

  1. 搜索能力yearmonth

  2. 制作日期对象的能力:

    const dateOfBirth = new Date(
      user.dateOfBirth.year, 
      user.dateOfBirth.month, 
      user.dateOfBirth.day
    );
    
    Run Code Online (Sandbox Code Playgroud)

这将避免时区转换,因为日期对象将在设备环境中创建


UPD

PS我不是在写优点和缺点,因为我的答案是关于单独存储日期的替代方法,并且使用这种方法时应该是显而易见的。

在下面的评论中与SergiiStotskyi聊天后,我决定提出优点和缺点,以警告开发人员选择最佳解决方案。

请记住,这种方法几乎没有什么好处。

优点(我只能找到两个):

  1. 单独的年、月、日字段有助于按确切的年、月、日进行过滤。例如:查找按年份分组的 5 月份的所有记录(以比较前几年月份的差异)。
  2. 与对时区敏感的 Date 相比,年、月、日不随时区变化
  3. 不完全是好处,如果每个元素日期也是单独的,则可以保存来自客户端的日期

缺点:

  1. 如果需要按年龄获取记录,则很难确定,需要按年份字段使用近似值(在我的用例中,这最适合,因为没有人关心我的项目中的确切数字)
  2. 对于精确的年龄过滤,需要按年份进行聚合,并通过过滤超出范围的项目来减少
  3. 需要验证闰年


L. *_*yer 3

在幕后,猫鼬日期就像datejavascript 中的 a :它存储小时、秒等...与 SQL 中的日期/日期时间没有区别。一分钱,一英镑。话虽这么说,这只是一个显示问题。

原因是mongo不支持这种类型。您可以创建一个具有年/月/日属性的对象,但这会很麻烦。