我正在使用 pymongo。我的字段之一是:published_date這是一個格式為2020/03/10 07:20:09我可以使用以下聚合將此值轉換為日期時間:isodate = datetime.now()pipeline = [ {'$limit': 2}, {'$project': { 'date':'$published_date', 'date2': { '$dateFromString': { 'dateString': '$published_date', } }, } }]cursor = TEST_COLLECTION.aggregate(pipeline)list(cursor)date2轉換為日期時間的值在哪里(已經工作)?,F在,應該過濾文檔列表,例如date2 >= isodate 我嘗試通過實施來做到這一點:'date2': { '$filter': { 'input': { '$dateFromString': { 'dateString': '$published_date', } }, 'as': "date2", 'cond': { '$gte': ['$$date2', isodate] } } } 但它似乎不起作用,因為我收到以下錯誤:OperationFailure:$filter 的輸入必須是數組而不是日期更新 正如評論中所問,數據由具有多個字段的文檔組成,published_date是其中之一。我希望輸出符合 . 過濾器的文檔列表published_date >= datetime.now()。也許解決方案不是管道,但我不確定,因為這是我第一次使用aggregates.有什么想法嗎?
1 回答

江戶川亂折騰
TA貢獻1851條經驗 獲得超5個贊
忘記 $filter。它有不同的用途。您希望管道中有一個額外的 $match 階段來過濾掉$project 階段生成的文檔:
pipeline = [
{'$limit': 2},
{'$project': {
'date':'$published_date',
'date2': {
'$dateFromString': {
'dateString': '$published_date',
}
},
}
},
{'$match': {'date2': {'$gte': isodate}}}
]
假設你isodate是一個有效的日期對象。
添加回答
舉報
0/150
提交
取消