2017-08-05 2 views
1

Ich habe dies erforscht, aber kann nicht finden, warum, was ich versuche, funktioniert nicht, und wird warnen, dass ich etwas neu zu Python und sehr neu zu mongodb bin. Ich habe eine Mongo-Datenbank mit Tweets in JSON, die ich über Python und Pymongo abfragen möchte. Ich möchte die Felder 'text' und 'created_at' für alle Tweets, die "IP" enthalten, zurückgeben.Abfrage "wie" in Pymongo

Ich habe folgendes versucht, die perfekt funktioniert, wenn ich dies tun durch das Terminal:

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

In Python, nachdem das Experimentieren ich gefunden habe, dass ich die Feldnamen in Anführungszeichen setzen müssen. Ich habe die folgende ähnliche Abfrage bekommen zu arbeiten:

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

Aber wenn ich versuche:

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

oder

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

Ich bekomme eine

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

ich verwende Mongo 3.4.6 und Python 3.5.2

Antwort

2

Python hat keine spezielle Syntax für Regexes wie JavaScript.

Mit re

Sie zu müssen die Regex mit dem re module kompilieren:

import re 

rgx = re.compile('.*IP.*', re.IGNORECASE) # compile the regex 

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

Sie können re.IGNORECASE als Flag verwenden, wenn Sie iP, Ip und ip sowie übereinstimmen soll. Wenn Sie das nicht möchten, können Sie den re.IGNORECASE Teil fallen lassen.

Mit '$regex' Notation

Oder Sie können angeben, dass Sie mit einem regex arbeiten mit:

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