最近在進行離職人員資料分析時,發現在同時篩選離職時間和入職時間選取資料集時,頻頻發生報錯,具體如下:
只要新增**{「company.hiredate」:{"$lt":datetime(2020,1,1,0,0,0,0)}}**條件進行篩選就會報錯。換用其它欄位則不會(如下圖所示),一度以為是自己的程式碼寫錯了,仔細檢查並沒有存在邏輯錯誤、語法錯誤。
在查詢離職日期時,就採坑過,因為MongoDB資料儲存格式為Date(253402300799999),在查詢的時候,不可以使用ISODate(「2011-03-15T06:36:36.000Z」)時間型別查詢方法,比如想查詢離職時間為ISODate(「9999-12-31T23:59:59.999Z」),即在職狀態人員,怎麼辦?
採用了一個巧的方法,既然在職,離職日期必然不會大於當前時間+1,先獲取當前時間today,然後在此基礎上加1天,作為查詢時間篩選條件的一個變數re_date。
import datetime
today=datetime.datetime.now()#當天時間
offset = datetime.timedelta(days=+1)#增加一天
re_date = today + offset
由此,猜想會不會company.hiredate也可能存在這樣的問題,回到MongoDB發現果然如此,這個欄位的資料格式是不統一的
所以,按同樣的方式來處理,由於需要找到在2019年12月31日之前入職而未離職人員,若依設定時間篩選變數start=datetime.datetime(2020,1, 1, 0, 0, 0, 0),取小於這個入職時間的人員,程式碼修改為
這裡只展示兩個查詢結果,代表問題解決就可以了