我正在使用 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转换为日期时间的值在哪里(已经工作)。现在,应该过滤文档列表,例如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
提交
取消