周号至月份的第一天和月份名称

时间:2019-07-23 11:08:02

标签: mongodb subquery aggregation

如何使用基于周nr的汇总来获取月份的第一天和月份的名称。

redux-persist-transform-filters

返回星期数(1、2、22、13)

1 个答案:

答案 0 :(得分:0)

假设您有一个名为example的实体,并且有一个名为closing_date的字段,其中保存日期值。

现在,我们可以使用聚合了。

    db.getCollection('example').aggregate(
    [{
        $match:{"entity":"example"}
     },
     {$project:{date:"$closing_date",week:{$week:"$closing_date"}, month:{$month:"$closing_date"},dayOfweek:{$dayOfWeek:"$closing_date"},dayOfmonth:{$dayOfMonth:"$closing_date"},year:{$year:"$closing_date"}}},
      {$group:{_id:{year:"$year",week:"$week",month:"$month",dayOfMonth:"$dayOfmonth",dayOfWeek:"$dayOfweek"}}},
      {$project:{_id:0,"year":"$_id.year","month":"$_id.month","week":"$_id.week","dayOfWeek":"$_id.dayOfWeek","dayOfMonth":"$_id.dayOfMonth"}}
    ]
   );

输出

让我们假设字段closing_date拥有值ISODate("2017-10-12T13:09:46.157Z") 然后查询返回:

   {
    "year" : 2017,
    "month" : 10,
    "week" : 41,
    "dayOfWeek" : 5,
    "dayOfMonth" : 12
}

类似地,您可以找到$dayOfYear$hour$minute等。这是在mongo-db中执行聚合的方法。

我不确定您是否要求第一部分。

要获取每月的第一天:

db.getCollection('example').aggregate([
  {
    $project:
      {
        "closingDate": { $month: "$closing_date" },
      }
  },
  {
    $group:
      {
        "_id": "$closingDate"
      }
  },
  {
    $project:
      {
        "_id": 0,
        "month": "$_id",
        "Day": { $subtract: [ { $dayOfMonth: "$closingDate" }, 1 ] },
        "time_stamp": { $subtract: [ "$closingDate", new Date("1970-01-01") ] }
      }
  },
  {
    $project:
      {
        "month": 1,
        "time":
          {
            $subtract:
              [
                { $subtract: [ "$time_stamp", { $mod: [ "$time_stamp", 24 * 60 * 60 * 1000 ] } ] },
                { $multiply: [ "$Day", 24 * 60 * 60 * 1000 ] }
              ]
          }
      }
  }
])

输出

{ 
"month": 10, 
"time": 1506863386000 
}

现在,您可以将此时间戳记转换为日期,然后获得该月的第一天。

注意:您可以使用在线时间戳转换工具进行验证。