【问题标题】:Querying "like" in pymongo [duplicate]在pymongo中查询“喜欢” [重复]
【发布时间】:2018-01-13 10:49:42
【问题描述】:

我对此进行了研究,但找不到为什么我正在尝试的方法不起作用,并且会警告我对 python 有点陌生,对 mongodb 也很陌生。我有一个 JSON 格式的推文 mongo 数据库,我试图通过 Python 和 pymongo 进行查询。我想为所有包含“IP”的推文返回“文本”和“created_at”字段。

我尝试了以下方法,当我通过终端执行此操作时效果很好:

db.tweets.find({text:/IP/},{text:1,created_at:1})

在 Python 中,经过实验我发现我需要将字段名称放在引号之间。我得到了以下类似的查询:

cursor = db.tweets.find({'created_at':"Thu Apr 28 09:55:57 +0000 2016"},{'text':1,'created_at':1})

但是当我尝试时:

db.tweets.find({"text": /.*IP.*/},{'text':1,'created_at':1})

cursor = db.tweets.find({'text':/IP/},{'text':1,'created_at':1})

我得到一个

'SyntaxError: invalid syntax' at the "/IP/" part of the code.

我正在使用 mongo 3.4.6 和 python 3.5.2

【问题讨论】:

    标签: python regex mongodb pymongo


    【解决方案1】:

    Python 没有 JavaScript 那样的正则表达式的特殊语法。

    使用re

    您需要使用re module编译正则表达式

    import re
    
    rgx = re.compile('.*IP.*', re.IGNORECASE)  # compile the regex
    
    cursor = db.tweets.find({'text':rgx},{'text':1,'created_at':1})

    如果您想匹配iPIpip,也可以使用re.IGNORECASE 作为标志。如果您不想这样,可以删除 re.IGNORECASE 部分。

    使用'$regex' 表示法

    或者您可以指定您正在使用正则表达式:

    cursor = db.tweets.find({'text':<b>{'$regex':'IP'}</b>},{'text':1,'created_at':1})

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      • 2012-12-23
      • 2012-09-18
      • 1970-01-01
      • 2011-11-17
      • 2021-01-27
      • 1970-01-01
      相关资源
      最近更新 更多