我有费用明细,其中我想按月对费用进行分组,并返回该月和该特定月份的费用。我什至检查了Mongoose文档是否基于月份进行汇总,但由于我保存的日期如 2018年1月12日
,因此我的数据与标准不符。。有什么办法可以让我获取月份和该月的总额。
我想要-Jan:50,Feb:45等等...
下面是示例集合
{
"_id": {
"$oid": "5babee47a7d56e5fb896f181"
},
"date": "07-Sep-2018",
"expenseInfo": "Starbucks",
"category": "Restaurants",
"amount": 18
},
{
"_id": {
"$oid": "5bac361597bc8758fc065241"
},
"date": "01-Aug-2018",
"expenseInfo": "Michael kors bag",
"category": "Shopping",
"amount": 91
},
{
"_id": {
"$oid": "5baceaafc420d147806a8038"
},
"date": "14-Sep-2018",
"expenseInfo": "Gift",
"category": "Miscellaneous",
"amount": 100
}
答案 0 :(得分:2)
您可以尝试使用$toDate
db.collection.aggregate([
{ "$group": {
"_id": { "$month": { "$toDate": "$date" }},
"total": { "$sum": "$amount" }
}}
])
或者使用$dateFromString
db.collection.aggregate([
{ "$group": {
"_id": { "$month": { "$dateFromString": { "dateString": "$date" }}},
"total": { "$sum": "$amount" }
}}
])
答案 1 :(得分:1)
您可以尝试将$split
的$arrayElemAt
运算符用于索引1以返回月份值。
db.colname.aggregate(
[
{"$group":{
"_id":{"$arrayElemAt":[{"$split":["$date","-"]},1]},
"total":{"$sum":"$amount"}
}}
]
)