为了账号安全,请及时绑定邮箱和手机立即绑定

Mongo:投影后过滤

Mongo:投影后过滤

GCT1015 2022-12-20 16:15:34
我正在使用 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是一个有效的日期对象。


查看完整回答
反对 回复 2022-12-20
  • 1 回答
  • 0 关注
  • 61 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信