在pymongo中查询“喜欢”

时间:2017-08-05 17:36:38

标签: python regex mongodb pymongo

我已经研究了这个,但是找不到为什么我正在尝试的东西不起作用,并且会警告我对python有点新,对mongodb来说很新。我在JSON中有一个mongo推文数据库,我试图通过Python和pymongo查询。我想为包含“IP”的所有推文返回'text'和'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

1 个答案:

答案 0 :(得分:4)

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})

如果您想匹配re.IGNORECASEiPIp,也可以使用ip作为标记。如果您不想这样,可以放弃re.IGNORECASE部分。

使用'$regex'表示法

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

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