Pymongo聚合$在列表中

问题描述

我正在尝试从我的收藏中获取一些特定文件。我希望文档在数据库一个字段(display_url)中有一个子字符串,并且还要寻找在另一个字段(edge_media_to_caption.edges.node.text)中必须具有的一些关键字。第一个字段是url,因此我需要使用通配符,似乎可行的唯一方法是使用以下信号:。*

但是我比赛的第二部分在使用$ in时遇到问题,我认为它不起作用。第二个字段是带有text>

的字符串字段

因此,我需要获取具有我给出的正则表达式表达式的文档(我单独测试了此部分并且正在运行),并且还具有至少一个单词['。 corona。'”。 ,'。病毒。','。病毒。','。共病。','。大流行病。','。pândemia。']。

        client = MongoClient('localhost',27017)
        db = client.basededados
        collection = getattr(db,pdados) 
        pipeline= [{'$project': {"_id": True,'legenda': '$edge_media_to_caption.edges.node.text','data': '$taken_at_timestamp','hash': '$tags','id' :'$display_url'}},{'$match': {'$and': [{"id": {"$regex": '/%s/' % nitem[0]}},{"legenda": {"$in": ['.*corona.*','.*virus.*','.*vírus.*','.*covid.*','.*pandemia.*','.*pândemia.*']}}
                                ]}}
                    ]

解决方法

要通配符匹配字符串use a regex。在纯Mongo中:

{$in: [/\.corona\./,...]}

在pymongo中,您可以使用本机Python regexen:

import re

...

{'$in': [re.compile(r'\.corona\.'),...]}