【发布时间】:2014-09-30 08:39:28
【问题描述】:
我在 MongoDB 中有一个名为 Document 的集合。此集合中的文档有一个名为 CreationDate 的字段,以 ISO 日期类型存储。我的任务是统计每天创建的文档数量并按数量异步排序。输出格式必须是 [{_id:'yyyy-MM-dd', cnt:x}]。我尝试使用如下聚合框架。
db.Document.aggregate(
, {$project: {_id:1, Year:{$year:'$CreationDate'}, Month:{$month:'$CreationDate'}, Date:{$dayOfMonth:'$CreationDate'}}}
, {$group: {_id:{$concat:['$Year', '-', '$Month', '-', '$Date']}, cnt:{$sum:1}}}
, {$sort:{'cnt':-1}}
);
代码给我的错误如下:
$concat only supports strings, not NumberInt32
我理解这是因为 $year、$month 和 $dayOfMonth 都返回数字。可以将 _id 字段组合为一个对象,并在应用程序级别将其重新格式化为所需的格式。
但从技术角度来看,我有两个问题:
如何在 MongoDB shell 中将数字转换为字符串?在这种情况下,然后可以将 $year 的输出转换为字符串并在 $concat 中使用。
有没有更好的方法将 ISODate 输出格式化为各种日期格式?在许多情况下,我们只需要 ISODate 的某些部分,例如:日期部分或时间部分。是否有任何 MongoDb 内置运算符来实现这一点?
提前感谢您的任何建议。
【问题讨论】:
-
是否有理由需要在 MongoDB 中完全格式化输出?我只需要编写一个小脚本来根据它接收到的文档来格式化一些字符串输出。否则,您应该查看MapReduce。
-
菲利普,没有理由!我只是在尝试探索。无论如何,谢谢。
标签: mongodb mongodb-query aggregation-framework