2015-03-05 2 views
0

Я пытаюсь создать новую коллекцию на основе результата поиска.mongodb результат из командной строки, отличный от pymongo

Из MongoDB (robomongo) командной строки, если я делаю это

db.liCollection.find({current_companies : { $regex: /^DIKW/i }}) 

Я получаю хороший restult 11 документов из 2,6 млн.

Теперь, если я пытаюсь использовать PyMongo как это:

from pymongo import MongoClient 

uri = "mongodb://user:[email protected]/the_database" 
client = MongoClient('pcloud') 

# connect to the liDB 
li_db = client['liDB'] 

#get all dikw employees 
dikw_current = li_db.liCollection.find({'current_companies':{'$regex':'/^DIKW/i'}}) 

list(dikw_current) 

Кроме того, как это не используя регулярное выражение никакого результата ...

import re 
regx = re.compile("/^DIKW/i", re.IGNORECASE) 
li_db.liCollection.find_one({"current_companies": regx}) 

что не так?

ответ

2

С помощью pymongo вы не используете косую черту в качестве разделителя в своем регулярном выражении, так как вы используете регулярные выражения python. См why

Измените свой запрос на li_db.liCollection.find_one({"current_companies": "^DIKW"}) .Если вам необходимо указать параметры в вашем использовании регулярных выражений re.compile

import re 
regx = re.compile("^DIKW", re.IGNORECASE) 
li_db.liCollection.find_one({"current_companies": regx}) 
0

Я только что нашел вы можете также использовать синтаксис $regex. Вам не нужно импортировать модуль re и использовать регулярное выражение python: просто добавьте параметр $options, он также будет работать на pymongo.

db.liCollection.find({'current_companies' : {'$regex': '^DIKW', '$options': 'i'}}) 

Источник: https://docs.mongodb.org/manual/reference/operator/query/regex/#op._S_options

Смежные вопросы