javascript - MongoDB 聚合框架 - 按年份分组

我一直在尝试使用聚合函数按年份对日期字段进行分组:

db.identities.aggregate([
{
    $group : {
        _id : { year : {$year : "$birth_date"}},
        total : {$sum : 1}
        }
    }   
])

然而,我的一些日期在 1970 年之前,作为 Windows 用户,我收到了一个关于 gmtime 的严重错误:

{
    "errmsg" : "exception: gmtime failed - your system doesn't support dates before 1970",
    "code" : 16422,
    "ok" : 0
}

我知道现在显而易见的答案是让我运行虚拟机或其他东西,但我只是好奇是否有任何适用于 Windows 的解决方法(在我的情况下是 Windows 7)。如果没有多少性能损失会将日期存储为嵌套对象,即:

birth_date : {
  year : 1980,
  month : 12,
  day : 9
}

我不太确定索引等会有多忙碌。

任何建议表示赞赏!

最佳答案

已知某些版本的 Windows 可以正常工作。无论如何,您使用的是 32 位操作系统吗?有问题的代码是here ,并且取决于 gmtime_s() 实现。

如果此集合仅用于聚合查询,您当然可以将日期组件存储在对象中。我建议缩写字段名称(例如 ymd)以节省存储空间,因为字段字符串存在于每个存储的文档。这里的权衡是不能使用任何聚合日期运算符。您可能希望将时间戳存储为有符号整数(例如 ts),以便在必要时轻松进行范围查询。

https://stackoverflow.com/questions/13903687/

相关文章:

python - 如何让 django celery 写入测试数据库以进行功能测试?

mongodb - Mongos认证

javascript - 不确定如何在 Express/MongoDB 应用程序中处理数据访问对象/

mongodb - .NET 驱动程序与 LINQ : NotSupportedException:

mongodb - 使用 pymongo 将 MongoDB 导出为 CSV

java - 在等待与 WritableServerSelector 匹配的服务器时超时 30000

mongodb - 对大量数据使用 Mongo 地理空间查询

mongodb - MongoDB 中 V8 JavaScript 引擎对 map reduce 的

mongodb - 使用 SSL 的 mongodump 和 mongorestore

mongodb - Mongoid 没有服务器可用匹配首选项