Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 猫鼬按月分组_Node.js_Mongodb_Mongoose_Aggregation Framework - Fatal编程技术网

Node.js 猫鼬按月分组

Node.js 猫鼬按月分组,node.js,mongodb,mongoose,aggregation-framework,Node.js,Mongodb,Mongoose,Aggregation Framework,我有费用明细,我想在其中按月对费用进行分组,并返回该月的费用和该月的费用。我甚至检查了Mongoose文档,以便根据月份进行聚合,但我的数据不符合他们的标准,因为我正在保存日期,如2018年1月12日 。有没有一种方法可以让我得到这个月以及这个月的总金额 我想要一些像-1月50日,2月45日等等 以下是样本收集 { "_id": { "$oid": "5babee47a7d56e5fb896f181" }, "date": "07-Sep-2018",

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

。有没有一种方法可以让我得到这个月以及这个月的总金额

我想要一些像-1月50日,2月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
}
您可以尝试使用for index 1运算符返回月份值

db.colname.aggregate(
[
   {"$group":{
      "_id":{"$arrayElemAt":[{"$split":["$date","-"]},1]},
      "total":{"$sum":"$amount"}
   }}
 ]
)

您可以使用mongodb4.0尝试以下聚合

或使用mongodb3.6及以上版本


谢谢,它按预期工作。第一个没有工作,我得到了无法识别的表达式“$toDate”。第二个几乎可以工作,除了我想得到月名而不是月号,因为我必须在UI
[{{u id:10,total:120},{u id:4,total:25},{{u id:9,total:118},{u id:8,total:91},{u id:5,total:700},{u id:7,total:20}]
您正在使用mongodb 4.0吗?不,我没有使用4.0,请原谅我的无知!
db.collection.aggregate([
  { "$group": {
    "_id": { "$month": { "$toDate": "$date" }},
    "total": { "$sum": "$amount" }
  }}
])
db.collection.aggregate([
  { "$group": {
    "_id": { "$month": { "$dateFromString": { "dateString": "$date" }}},
    "total": { "$sum": "$amount" }
  }}
])