在 PyMongo 中使用$not $in $regex



我想做一个相当于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 inPyMongo 一起工作?

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

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

不过不知道。

或者也许:

.*?bAmazonb.*
.*?beBayb.*
.*?bAliBabab.*

如果您想探索/简化/修改表达式,它已经 在右上角的面板上解释 regex101.com。如果您愿意,您可以 也可以在这个看 链接,它将如何匹配 针对某些示例输入。


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

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

参考

如何在MongoDB中使用"不喜欢"运算符

最新更新