Pymongo 聚合 $in 列表

Posted

技术标签:

【中文标题】Pymongo 聚合 $in 列表【英文标题】:Pymongo aggregate $in list 【发布时间】:2020-12-26 19:33:12 【问题描述】:

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

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

所以我需要获取具有我给出的正则表达式的文档(我单独测试了这部分并且正在工作)并且还至少包含一个单词 ['.corona.' ,'.virus.','.vírus.','.covid.','.大流行病。','.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.*']
                                ]
                    ]

【问题讨论】:

【参考方案1】:

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

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

在 pymongo 中,可以使用原生 Python 正则表达式:

import re

...

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

【讨论】:

嘿,谢谢!它几乎起作用了,我不知道为什么,但是我在 pymongo 中的通配符仅适用于 .* ,我改变了并且像魅力一样工作!谢谢。

以上是关于Pymongo 聚合 $in 列表的主要内容,如果未能解决你的问题,请参考以下文章

PyMongo 不返回聚合结果

Pymongo 中的聚合函数

PyMongo 聚合不适用于 $max 运算符

当数据非常嵌套时如何使用 $gt 聚合文档和聚合 Pymongo

pymongo中带有forEach函数的Mongo聚合查询不起作用

PyMongo 匹配 JavaScript 正则表达式对象