我正在和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
是转换为datetime的值(已经在工作).现在,文档列表应该被过滤,如 date2 >= isodate
我试着通过实现来实现它。
'date2': {
'$filter': {
'input': {
'$dateFromString': {
'dateString': '$published_date',
}
},
'as': "date2",
'cond': {
'$gte': ['$$date2', isodate]
}
}
}
但似乎没有用,因为我得到了以下错误。
OperationFailure: $filter的输入必须是一个数组,而不是日期。
更新正如评论中所要求的那样,数据由具有若干字段的文件组成。published_date
是其中之一。我希望输出的是一个符合过滤器的 published_date >= datetime.now()
.
也许解决方案不是一个管道,但我不确定,因为这是我第一次与 aggregates
.
有什么想法吗?
忘记$filter。它的作用不同。你希望在管道中多一个$match阶段来过滤掉以下内容 文件 阶段产生的。
pipeline = [
{'$limit': 2},
{'$project': {
'date':'$published_date',
'date2': {
'$dateFromString': {
'dateString': '$published_date',
}
},
}
},
{'$match': {'date2': {'$gte': isodate}}}
]
假设你的 isodate
是一个有效的日期对象。