我已经研究了这个,但是找不到为什么我正在尝试的东西不起作用,并且会警告我对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
答案 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.IGNORECASE
,iP
和Ip
,也可以使用ip
作为标记。如果您不想这样,可以放弃re.IGNORECASE
部分。
'$regex'
表示法或者您可以使用以下命令指定正在使用正则表达式:
cursor = db.tweets.find({'text':{'$regex':'IP'}},{'text':1,'created_at':1})