问题描述
我正在尝试从我的收藏中获取一些特定文件。我希望文档在数据库的一个字段(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\.'),...]}