MongoDB聚合框架 - 按年分组

bac*_*esk 8 javascript mongodb

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

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

我的一些日期然后在1970年之前,作为一个Windows用户我得到一个关于gmtime的令人讨厌的错误:

{
    "errmsg" : "exception: gmtime failed - your system doesn't support dates before 1970",
    "code" : 16422,
    "ok" : 0
}
Run Code Online (Sandbox Code Playgroud)

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

birth_date : {
  year : 1980,
  month : 12,
  day : 9
}
Run Code Online (Sandbox Code Playgroud)

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

任何建议赞赏!

jmi*_*ola 1

已知某些版本的 Windows 可以运行。您使用的是 32 位操作系统吗?有问题的代码在这里,并且取决于gmtime_s()实现。

如果这个集合只是用于聚合查询,那么您当然可以通过将日期组件存储在对象中来实现。我建议缩写字段名称(例如,,,y)以保存在存储中,因为字段字符串存在于每个存储的文档中。这里的权衡是不能使用任何聚合日期运算符。您可能希望将时间戳存储为有符号整数(例如),以便您可以在必要时轻松执行范围查询。mdts