【问题标题】:How to filter by year and week in MongoDB如何在 MongoDB 中按年和周过滤
【发布时间】:2017-12-07 08:40:55
【问题描述】:

我需要计算一些按 Week 和 year 分组的字段的总和,例如 当 dt_extract 是:02-01-2017 :所以周数是 1 和 2017 年,但我的查询的问题我不知道是 2017 年还是 2016 年,我只是控制一周,但是我需要得到周数和年份来计算我的 Sum 。

var group1 = {

$group :{

        _id:{
                "$isoWeek": "$dt_extract"},

        "Sum_Reliability_Rate_Numerator":{
        "$sum":"$mlf16_txfiabnum"   
        }

}
}

var sort ={

$sort : { _id : -1 } 


}
}


 db.mplf_tmp_v3.aggregate([group1,sort])

此查询有效,但我找不到哪一年(在我的收藏中,我有 2016 年、2017 年,很快我将获得 2018 年)

我做了这个请求,但没有结果

var match = {


$match : {

         "dt_extract": {"$in":
     [
         "2017-01-02",
         "2017-12-04" 
         ]
     }


}


}

var group = {

$group :{
            "_id":{
                "$isoweek" :"$dt_extract" , 

        },

        "Sum_Reliability_Rate_Numerator":{
        "$sum":"$mlf16_txfiabnum"   
        }
}
}

 db.supplierswarnings.aggregate([match,group])

这里是这个集合的文档示例

{
    "_id" : ObjectId("5a2813a32539c8990f725a8f"),
    "dt_extract" : ISODate("2017-05-14T00:00:00.000+02:00"),
    "mlf16_annee" : "2017",
    "mlf16_semind" : "19",
    "mlf16_semcal" : "19",
    "mlf16_cptmag" : "0000900156",
    "mlf16_codraft" : "02",
    "mlf16_cptfou" : "0000115768",
    "mlf16_codadrdl" : "01",
    "mlf16_codadres" : "01",
    "mlf16_grpges" : "4P",
    "mlf16_clasges" : "2",
    "mlf16_txservnum" : 1,
    "mlf16_txservden" : 13,
    "mlf16_txdocnum" : 0,
    "mlf16_txdocden" : 1,
    "mlf16_txfiabnum" : 0,
    "mlf16_txfiabden" : 0,
    "mlf16_refret2j" : 1,
    "mlf16_refret7j" : 1,
    "mlf16_refret21j" : 0,
    "mlf16_natcouv" : "0",
    "mlf16_nbligndiff" : 0,
    "mlf16_nbrefdiff" : 0,
    "mlf16_cptfou_six" : "115768",
    "dt_year" : 2017
}

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:
    var project = {
         $project:{  
           correctWeek:{
                $cond:[
                    {$lt:[{ $isoWeekYear:"$dt_extract"},{$year:"$dt_extract"}]},
                    1,
                    {$isoWeek:"$dt_extract"}
                ]
             }
           }
       }
    
    
    
     var group = {
    
        $group :{
                    "_id":"$correctWeek",
    
                "Sum_Reliability_Rate_Numerator":{
                "$sum":"$mlf16_txfiabnum"   
                }
        }
        }
    
    db.supplierswarnings.aggregate([match,project,group])
    

    或 而不是在你的问题中使用 $isoWeek 为什么不使用 $week

     var group = {
    
            $group :{
                        "_id":{$week:"$dt_extract"},
    
                    "Sum_Reliability_Rate_Numerator":{
                    "$sum":"$mlf16_txfiabnum"   
                    }
            }
            }
    

    【讨论】:

      【解决方案2】:
       var match = {
      
      
          $match : {
      
          "dt_extract": {
          "$gte": new Date("2017-01-02"),
          "$lte": new Date("2017-12-04")
        }
      
      }
      
      
      }
      
      
      var group = {
      
      $group :{
              "_id":{
                      weekNum : {"$isoWeek" :"$dt_extract"} ,
                      year :{"$isoWeekYear": "$dt_extract"},
                      dt_extract_date: "$dt_extract"
              },
      
              "Sum_Reliability_Rate_Numerator":{
              "$sum":"$mlf16_txfiabnum"   
              }
      
      }
      }
      
      var project = {
      
      
      $project: { 
      
          "Sum_Reliability_Rate_Numerator":1
      }
      
      
      }
      
      var sort = {
          $sort :{_id : -1}
      }
      
      
       db.mplf_tmp_v3.aggregate([match,group,project,sort])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-07
        • 2014-12-31
        • 1970-01-01
        • 2014-02-12
        • 2021-05-11
        • 1970-01-01
        • 2021-11-24
        • 1970-01-01
        相关资源
        最近更新 更多