Pymongo 聚合 $in 列表

Pymongo aggregate $in list

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

但是我在比赛的第二部分遇到了问题,我认为它不起作用。第二个字段是一个字符串字段,文本>

所以我需要获取包含我给出的正则表达式的文档(我单独测试了这部分并且正在运行)并且至少包含 ['.corona.','.virus.','.virus.','.covid.','.pandemia.','.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正则表达式:

import re

...

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