在 PyMongo 中使用 $not $in $regex

Posted

技术标签:

【中文标题】在 PyMongo 中使用 $not $in $regex【英文标题】:Using $not $in $regex in PyMongo 【发布时间】:2019-12-24 06:14:52 【问题描述】:

我想做一个相当于vendor NOT IN ('Amazon', 'eBay', 'AliBaba')的PyMongo。

我可以通过以下方式让它在 MongoDB 中工作:

'vendor': '$not': '$in': [/^Amazon/, /^eBay/, /^AliBaba/]

这行得通。

在 PyMongo 中,无论我尝试什么,我都没有得到任何结果。它没有抛出任何错误,但也没有返回任何结果。

这是我尝试过的:

1)

import re
vendor = '$not': '$in': [re.compile('^Amazon'), re.compile('^eBay'), re.compile('^AliBaba')]

2)

import re
vendor = '$not': '$in': [re.compile('.*Amazon.*'), re.compile('.*eBay.*'), re.compile('.*AliBaba.*')]

我错过了什么?为什么我不能让not in 与 PyMongo 一起工作?

【问题讨论】:

【参考方案1】:

我的猜测是,也许您正在尝试设计一个有点接近的表达式:

^(?!.*\b(Amazon|eBay|AliBaba)\b).*$

虽然不确定。

或许:

.*?\bAmazon\b.*
.*?\beBay\b.*
.*?\bAliBaba\b.*

如果您想探索/简化/修改表达式,它已经 在右上角的面板上进行了解释 regex101.com。如果你愿意,你 也可以在this link看,怎么搭配 针对一些样本输入。


我们的代码可能如下所示:

db.collection.find(name:'$regex' : '^(?!.*\b(Amazon|eBay|AliBaba)\b).*$', '$options' : 'i')

参考

How can I use 'Not Like' operator in MongoDB

【讨论】:

以上是关于在 PyMongo 中使用 $not $in $regex的主要内容,如果未能解决你的问题,请参考以下文章

pymongo.errorsCursor not found

Pymongo 聚合 $in 列表

PyMongo $in + $正则表达式

MongoDB 查询语法:如何在 $in 中使用 $isNull (pymongo api)

想要在 R 中绘制决策树得到这个错误: (sapply(split, tail, 1) %in% mf_levels[[var_id]]) is not TRUE

R语言dplyr包数据过滤(filter)基于not in规则实战(not in Filter):基于单数据列not in规则过滤数据行基于多数据列not in规则过滤数据行