node.js - 在 Mongoose 中按月分组

标签 node.js mongodb mongoose aggregation-framework

<分区>

我有费用明细,我想在其中按月对费用进行分组,并返回月份和该特定月份的费用。我什至检查了 Mongoose 文档,以根据月份进行汇总,但我的数据不符合他们的标准,因为我正在保存日期,如 12-Jan-2018

.有什么方法可以让我获得当月的月份和总金额。

我想要类似 - 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
}

最佳答案

您可以使用 $toDate 尝试使用 mongodb 4.0 进行以下聚合

db.collection.aggregate([
  { "$group": {
    "_id": { "$month": { "$toDate": "$date" }},
    "total": { "$sum": "$amount" }
  }}
])

或使用 mongodb 3.6 及更高版本使用 $dateFromString

db.collection.aggregate([
  { "$group": {
    "_id": { "$month": { "$dateFromString": { "dateString": "$date" }}},
    "total": { "$sum": "$amount" }
  }}
])

关于node.js - 在 Mongoose 中按月分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52752088/

相关文章:

node.js - aws xray 采样不适用于 http 状态代码

javascript - 在某些操作或断开连接时识别用户

mongodb - 适用于Grails 1.3.7的Mongodb聚合框架

javascript - 是否可以在 mongoDB 2.6 上的聚合内使用来自不同集合的数据

mongodb - Mongoose 是否只支持数组中的嵌入文档?

javascript - 引用错误: my var is not defined

javascript - 使用 Pug 打印 Mongoose 数据库中的所有项目

java - Mongodb:循环查询的模式设计是否正确?

node.js - Express.js CRUD 应用程序无法删除

node.js - findById 返回文档列表而不是单个结果