4
我有交易数据的集合在MongoDB中,像这样的:如何按月在mongodb中对文档进行分组?
[
{timestamp: ISODate("2015-11-10T11:33:41.075Z"), nominal: 25.121},
{timestamp: ISODate("2015-11-22T11:33:41.075Z"), nominal: 25.121},
{timestamp: ISODate("2015-11-23T11:33:41.075Z"), nominal: 26.121},
{timestamp: ISODate("2015-12-03T11:33:41.075Z"), nominal: 30.121},
]
我如何使用MongoDB的骨料()每个月要计算我总交易? 我试图用
db.getCollection('transaction').aggregate([
{ $group: {_id: "$timestamp", total: {$sum: "$nominal"} } }
])
它失败了,因为我用timestamp
,而不是month
。我不想为交易数据添加month
的另一个字段。我想为$ group管道定制一个返回月份值的函数。 这可能吗?如果是这样,怎么样?
这将很好地工作只有当你只有不到12个月的历史数据库。正确的实现应该返回年份数据。 – sorin
@sorin from mongodb 3.0+您可以使用$ dateToString而不是$ month,并且您可以传递格式(参考:https://docs.mongodb.com/manual/reference/operator/aggregation/dateToString/) – axelvnk
或者if你低于3.0你可以破解你的方式到日期的连接版本。您需要2个项目阶段,一个分别格式化$ month和$ year。然后另一个阶段使用$ concat并且连接两个新字段。不要忘记在年份和月份使用substr,因为你不能连续整数。 – axelvnk