簡體   English   中英

PyMongo 通過字符串“日期”字段進行高級查詢

[英]PyMongo advanced query by string "date" field

我有一個 python 腳本,該腳本正在訪問 Alteryx MongoDB 並拉入隊列表。 效果很好,但它是一個相當愚蠢的collection.find()返回所有內容。 規模現在不是不可逾越的,但會繼續增長。 我只需要當天的結果。 不幸的是,Alteryx MongoDB 實例對所有日期字段都使用字符串。 我已經使用 Studio 3T 編寫了一個腳本來提取數據,但我一直堅持如何將其轉換為 python 查詢,因此我可以在 Lambda 中自動執行此操作。

Python Function:

def authenticate():  
    client = MongoClient('mongodb://user:*******')
    db = client.AlteryxService
    collection = db.AS_Queue
    data = pd.DataFrame(list(collection.find()))
   
    #Trim columns not needed 
    data = data.drop(["IsAnonymous", "RestrictOutput","AS_Schedules__ID","__ServiceData", "__Version","__UpdateCheck"], axis=1 )
    #Swap Object to string type
    data = data.astype('string')

    #Change time to D/T
    data["CompletionDateTime"] = pd.to_datetime(data["CompletionDateTime"])
    data["CreationDateTime"] = pd.to_datetime(data["CreationDateTime"])

    #Grab only todays data
    today = datetime.datetime.now().strftime('%Y/%m/%d')
    data = data[data['CreationDateTime'] >= today]
    #normalize to postgres output
    data.columns = map(str.lower, data.columns)

    return data

如果我只抓住當天,function 的這一部分很容易被修剪掉。

在 Studio3T 腳本中,我使用這個:

today = new Date();
  today.setHours(0, 0, 0, 0);
startOfDay = today.toISOString()
 .slice(0, -5)
 .replace(/T/g, match => match === 'T' ? ' ' : '');
end = new Date();
end.setHours(23, 59, 59, 999);
endOfDay = end.toISOString()
 .slice(0, -5)
 .replace(/T/g, match => match === 'T' ? ' ' : '');
db.getCollection("AS_Queue").find( 
   { 
     "CompletionDateTime": {
       $gt: startOfDay,
       $lt: endOfDay
}},{"IsAnonymous":0,"RestrictOutput":0,"AS_Schedules__ID":0,"__ServiceData":0,"__Version":0,"__UpdateCheck":0})

這將返回我需要的列和正確的日期。 如何將其轉換為 python 查詢? 當我通過添加 columns:0 來修剪大小時,它返回零結果。

要構造查詢 YYYY-MM-DD 格式的日期字符串的等價過濾器,請使用:

from datetime import date, timedelta
start_of_day = date.today().strftime("%Y-%m-%d")
end_of_day = (date.today() + timedelta(days=1)).strftime("%Y-%m-%d")
doc_filter = {
    "CompletionDateTime": {
        '$gte': start_of_day,
        '$lt': end_of_day
    }
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM