如何在MongoDB中按年和周过滤

时间:2017-12-07 08:40:55

标签: mongodb mongodb-query

我需要计算按周和年分组的一些字段的总和,例如 当 dt_extract 是:02-01-2017:所以星期的数量是1和2017年,但我的查询问题我不确切知道2017年或2016年i juste控制一周,但我需要得到一周的数字,也需要一年来计算我的总和。

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
}

2 个答案:

答案 0 :(得分:0)

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"   
                }
        }
        }

答案 1 :(得分:0)

HTMLMediaElement