【问题标题】:Using $not $in $regex in PyMongo在 PyMongo 中使用 $not $in $regex
【发布时间】: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 一起工作?

【问题讨论】:

    标签: python regex django mongodb 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-30
      • 2017-09-18
      • 2016-02-11
      • 2017-11-26
      • 2021-05-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多