如何在 PyMongo 中使用 OR 语句和变量赋值?

How to utilize OR statements and variable assignment in PyMongo?

我正在处理推文。我想为每条推文分配品牌名称和广告名称。我在 python 而不是严格意义上的 mongo 工作,因为我想为即将举行的活动自动执行此过程。总的来说,我正在处理超过 70 万条推文。我想尽可能多地在 PyMongo 中工作,这样我的处理时间就可以短而愉快。

以下代码与更广泛的脚本相关,该脚本在此之前收集和聚合推文。这仅与根据正则表达式值分配广告有关。我的问题是我的测试数据库中的所有推文都被更新为 TRUE,即使它们不持有分配的 RE 值。

col.update_many({},
                {'$set': {"AdName": 'x'} }
                )

col.update_many({"AdName": {"$exists": True}},
                [{'$set':
                    {'AdName':
                        {"$or":
                        [{'$eq':[{'text':re.compile('BudLight')},'TestAdName']}]
                        }
                    }
                  }
                ]
                )

我希望看到的事情发生

我正在尝试更新这些推文以根据 or 语句中的 RE 值保留特定的广告名称。之后,我将根据通过此过程分配的广告标题为每条推文分配一个品牌。

我假设我的更新语法可能不正确,但 PyMongo 文档对我尝试做的事情并不是很有帮助。

另外: PyMongo 不支持条件语句中的 $regex 命令。

我能够更好地理解如何实现这个想法。

我的错误是将条件语句放在更新参数中。 $or 函数在 update_many 的过滤函数中效果更好。满足过滤器后,我就可以充分更新 AdTitle。

# Avengers Endgame
col.update_many(
                {'$or' :
                        [
                         {'text': { '$regex' : 'avengers', '$options' : 'i'}},
                         {'text': { '$regex' : 'Avengers', '$options' : 'i'}},
                         {'text': { '$regex' : 'Endgame', '$options' : 'i'}},
                         {'text': { '$regex' : 'endgame', '$options' : 'i'}},
                         {'text': { '$regex' : 'avengers endgame', '$options' : 'i'}},
                        ]
                },
                  [{'$set':{'AdTitle':'Avengers Endgame'}}]
                 )