【问题标题】:How to calculate YTD and MTD in mongodb?如何在mongodb中计算YTD和MTD?
【发布时间】:2017-03-27 14:59:54
【问题描述】:

如何在单个查询中计算 mongodb 中的 Month-To-Date(MTD) 和 Year-To-Date(YTD)?下面的示例数据,在这个数据中,请求的是一个日期字段,我想计算 MTD 和 YTD,假设财政年度为“今年 1 月 1 日”(例如 2016 年的财政年度为“01-Jan-2016 " :

     {
  "_id": {
    "$oid": "5808578b33fa6f161c9747f8"
  },
  "_class": "exceltest.TestBean",
  "requestedOn": "2000-03-01",
  "bookName": "Test6",
  "revenue": 10.0,
  "unitsSold": 1,
  "bookCategory": [
    {
      "categoryCode": "Cooking/"
    },
    {
      "categoryCode": "Cooking/Beverages"
    },
    {
      "categoryCode": "Food Receipe/"
    },
    {
      "categoryCode": "Food Receipe/Bartending"
    },
    {
      "categoryCode": "Cooking/Beverages/Bartending"
    },
    {
      "categoryCode": "Food Receipe/Taste"
    }
  ]
}{
  "_id": {
    "$oid": "5808578b33fa6f161c9747f9"
  },
  "_class": "exceltest.TestBean",
  "requestedOn": "2000-03-01",
  "bookName": "Test1",
  "revenue": 11.0,
  "unitsSold": 2,
  "bookCategory": [
    {
      "categoryCode": "Cooking/"
    },
    {
      "categoryCode": "Cooking/Beverages"
    },
    {
      "categoryCode": "Food Receipe/"
    },
    {
      "categoryCode": "Food Receipe/Bartending"
    },
    {
      "categoryCode": "Cooking/Beverages/Bartending"
    },
    {
      "categoryCode": "Food Receipe/Taste"
    }
  ]
}{
  "_id": {
    "$oid": "5808578b33fa6f161c9747fa"
  },
  "_class": "exceltest.TestBean",
  "requestedOn": "2000-06-01",
  "bookName": "Test2",
  "revenue": 12.0,
  "unitsSold": 3,
  "bookCategory": [
    {
      "categoryCode": "Cooking/"
    },
    {
      "categoryCode": "Cooking/Beverages"
    },
    {
      "categoryCode": "Food Receipe/"
    },
    {
      "categoryCode": "Food Receipe/Bartending"
    },
    {
      "categoryCode": "Cooking/Beverages/Bartending"
    },
    {
      "categoryCode": "Food Receipe/Taste"
    }
  ]
}{
  "_id": {
    "$oid": "5808578b33fa6f161c9747fb"
  },
  "_class": "exceltest.TestBean",
  "requestedOn": "2000-07-01",
  "bookName": "Test3",
  "revenue": 13.0,
  "unitsSold": 4,
  "bookCategory": [
    {
      "categoryCode": "Cooking/"
    },
    {
      "categoryCode": "Cooking/Beverages"
    },
    {
      "categoryCode": "Food Receipe/"
    },
    {
      "categoryCode": "Food Receipe/Bartending"
    },
    {
      "categoryCode": "Cooking/Beverages/Bartending"
    },
    {
      "categoryCode": "Food Receipe/Taste"
    }
  ]
}{
  "_id": {
    "$oid": "5808578b33fa6f161c9747fc"
  },
  "_class": "exceltest.TestBean",
  "requestedOn": "2009-09-01",
  "bookName": "Test4",
  "revenue": 14.0,
  "unitsSold": 5,
  "bookCategory": [
    {
      "categoryCode": "Cooking/"
    },
    {
      "categoryCode": "Cooking/Beverages"
    },
    {
      "categoryCode": "Food Receipe/"
    },
    {
      "categoryCode": "Food Receipe/Bartending"
    },
    {
      "categoryCode": "Cooking/Beverages/Bartending"
    },
    {
      "categoryCode": "Food Receipe/Taste"
    }
  ]
}{
  "_id": {
    "$oid": "5808578b33fa6f161c9747fd"
  },
  "_class": "exceltest.TestBean",
  "requestedOn": "2009-06-01",
  "bookName": "Test5",
  "revenue": 15.0,
  "unitsSold": 6,
  "bookCategory": [
    {
      "categoryCode": "Cooking/"
    },
    {
      "categoryCode": "Cooking/Beverages"
    },
    {
      "categoryCode": "Food Receipe/"
    },
    {
      "categoryCode": "Food Receipe/Bartending"
    },
    {
      "categoryCode": "Cooking/Beverages/Bartending"
    },
    {
      "categoryCode": "Food Receipe/Taste"
    }
  ]
}{
  "_id": {
    "$oid": "5808578b33fa6f161c9747fe"
  },
  "_class": "exceltest.TestBean",
  "requestedOn": "2004-06-01",
  "bookName": "Test10",
  "revenue": 16.0,
  "unitsSold": 7,
  "bookCategory": [
    {
      "categoryCode": "Cooking/"
    },
    {
      "categoryCode": "Cooking/Beverages"
    },
    {
      "categoryCode": "Food Receipe/"
    },
    {
      "categoryCode": "Food Receipe/Bartending"
    },
    {
      "categoryCode": "Cooking/Beverages/Bartending"
    },
    {
      "categoryCode": "Food Receipe/Taste"
    }
  ]
}{
  "_id": {
    "$oid": "5808578b33fa6f161c9747ff"
  },
  "_class": "exceltest.TestBean",
  "requestedOn": "2000-01-01",
  "bookName": "Test11",
  "revenue": 100.0,
  "unitsSold": 100,
  "bookCategory": [
    {
      "categoryCode": "Cooking/"
    },
    {
      "categoryCode": "Cooking/Beverages"
    },
    {
      "categoryCode": "Food Receipe/"
    },
    {
      "categoryCode": "Food Receipe/Bartending"
    },
    {
      "categoryCode": "Cooking/Beverages/Bartending"
    },
    {
      "categoryCode": "Food Receipe/Taste"
    }
  ]
}{
  "_id": {
    "$oid": "580857b833fa6f0c3499e462"
  },
  "_class": "exceltest.TestBean",
  "requestedOn": "2000-02-01",
  "bookName": "Test1",
  "revenue": 20.0,
  "unitsSold": 10,
  "bookCategory": [
    {
      "categoryCode": "Cooking/"
    },
    {
      "categoryCode": "Cooking/Beverages"
    },
    {
      "categoryCode": "Food Receipe/"
    },
    {
      "categoryCode": "Food Receipe/Bartending"
    }
  ]
}{
  "_id": {
    "$oid": "580857b833fa6f0c3499e463"
  },
  "_class": "exceltest.TestBean",
  "requestedOn": "2001-02-01",
  "bookName": "Test2",
  "revenue": 19.0,
  "unitsSold": 9,
  "bookCategory": [
    {
      "categoryCode": "Cooking/"
    },
    {
      "categoryCode": "Cooking/Beverages"
    },
    {
      "categoryCode": "Food Receipe/"
    },
    {
      "categoryCode": "Food Receipe/Bartending"
    }
  ]
}{
  "_id": {
    "$oid": "580857b833fa6f0c3499e464"
  },
  "_class": "exceltest.TestBean",
  "requestedOn": "2001-02-01",
  "bookName": "Test3",
  "revenue": 18.0,
  "unitsSold": 8,
  "bookCategory": [
    {
      "categoryCode": "Cooking/"
    },
    {
      "categoryCode": "Cooking/Beverages"
    },
    {
      "categoryCode": "Food Receipe/"
    },
    {
      "categoryCode": "Food Receipe/Bartending"
    }
  ]
}{
  "_id": {
    "$oid": "580857b833fa6f0c3499e465"
  },
  "_class": "exceltest.TestBean",
  "requestedOn": "2007-06-01",
  "bookName": "Test4",
  "revenue": 17.0,
  "unitsSold": 7,
  "bookCategory": [
    {
      "categoryCode": "Cooking/"
    },
    {
      "categoryCode": "Cooking/Beverages"
    },
    {
      "categoryCode": "Food Receipe/"
    },
    {
      "categoryCode": "Food Receipe/Bartending"
    }
  ]
}{
  "_id": {
    "$oid": "580857b833fa6f0c3499e466"
  },
  "_class": "exceltest.TestBean",
  "requestedOn": "2005-06-01",
  "bookName": "Test5",
  "revenue": 16.0,
  "unitsSold": 6,
  "bookCategory": [
    {
      "categoryCode": "Cooking/"
    },
    {
      "categoryCode": "Cooking/Beverages"
    },
    {
      "categoryCode": "Food Receipe/"
    },
    {
      "categoryCode": "Food Receipe/Bartending"
    }
  ]
}{
  "_id": {
    "$oid": "580857b833fa6f0c3499e467"
  },
  "_class": "exceltest.TestBean",
  "requestedOn": "2004-06-01",
  "bookName": "Test1",
  "revenue": 15.0,
  "unitsSold": 5,
  "bookCategory": [
    {
      "categoryCode": "Cooking/"
    },
    {
      "categoryCode": "Cooking/Beverages"
    },
    {
      "categoryCode": "Food Receipe/"
    },
    {
      "categoryCode": "Food Receipe/Bartending"
    }
  ]
}{
  "_id": {
    "$oid": "580857b833fa6f0c3499e468"
  },
  "_class": "exceltest.TestBean",
  "requestedOn": "2002-06-01",
  "bookName": "Test2",
  "revenue": 14.0,
  "unitsSold": 4,
  "bookCategory": [
    {
      "categoryCode": "Cooking/"
    },
    {
      "categoryCode": "Cooking/Beverages"
    },
    {
      "categoryCode": "Food Receipe/"
    },
    {
      "categoryCode": "Food Receipe/Bartending"
    }
  ]
}{
  "_id": {
    "$oid": "580857b833fa6f0c3499e469"
  },
  "_class": "exceltest.TestBean",
  "requestedOn": "2001-06-01",
  "bookName": "Test3",
  "revenue": 13.0,
  "unitsSold": 3,
  "bookCategory": [
    {
      "categoryCode": "Cooking/"
    },
    {
      "categoryCode": "Cooking/Beverages"
    },
    {
      "categoryCode": "Food Receipe/"
    },
    {
      "categoryCode": "Food Receipe/Bartending"
    }
  ]
}{
  "_id": {
    "$oid": "580857b833fa6f0c3499e46a"
  },
  "_class": "exceltest.TestBean",
  "requestedOn": "2000-06-01",
  "bookName": "Test4",
  "revenue": 12.0,
  "unitsSold": 2,
  "bookCategory": [
    {
      "categoryCode": "Cooking/"
    },
    {
      "categoryCode": "Cooking/Beverages"
    },
    {
      "categoryCode": "Food Receipe/"
    },
    {
      "categoryCode": "Food Receipe/Bartending"
    }
  ]
}{
  "_id": {
    "$oid": "580857b833fa6f0c3499e46b"
  },
  "_class": "exceltest.TestBean",
  "requestedOn": "2008-06-01",
  "bookName": "Test5",
  "revenue": 11.0,
  "unitsSold": 1,
  "bookCategory": [
    {
      "categoryCode": "Cooking/"
    },
    {
      "categoryCode": "Cooking/Beverages"
    },
    {
      "categoryCode": "Food Receipe/"
    },
    {
      "categoryCode": "Food Receipe/Bartending"
    }
  ]
}

问候

克里斯

【问题讨论】:

  • 请向我们展示您到目前为止所做的尝试。

标签: mongodb


【解决方案1】:

将 MongoDB 中的日期保存为其原生日期格式 ISODate() 是一种很好的做法。

您可以使用日期格式 like $year,$month,$day,$hour 等。

根据您的情况,这些可用于分组:

    db.collectionName.aggregate([
          {$group:{_id:{'Date':{$year:'$requestedOn'}},total:{$sum:'$FieldName'}}}
     ])

要将字符串转换为 ISODate ,可以在

找到答案
   - [http://stackoverflow.com/questions/15473772/how-to-convert-from-string-to-date-data-type?noredirect=1&lq=1][2]
   - [http://stackoverflow.com/questions/15473772/how-to-convert-from-string-to-date-data-type?noredirect=1&lq=1][2]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 2011-11-04
    相关资源
    最近更新 更多