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

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