Как сделать запрос с учетом регистра и частичным совпадением в pymon go? - PullRequest
0 голосов
/ 15 апреля 2020

Я новичок в Python программировании. У меня есть функция, которая принимает коллекцию, и список фильтров.

poolFilter = [{"ip": "7.98"}, {"partition": "common"}]

searchCollection("pools", poolFilters)

def searchCollection(collection, filters):
    c = db[collection] 
    results = c.find({"$and" : filters},{'_id': False})  
    return results


Я бы запустил следующий запрос в MongoDB для частичного совпадения и проигнорировал регистр.

db.getCollection('f5.pools').find({$and : [{"ip": /7.98/i}, {"partition": /Common/i}]})

Я не знаю, как перевести этот запрос в Python для того же Результаты.

1 Ответ

0 голосов
/ 15 апреля 2020

Вы можете использовать оператор запроса $ regex и указать регистронезависимую опцию "i".

На основе этих тестовых документов:

{'ip': '10.2.7.98',
 'other': 'another field',
 'partition': 'this is coMMon',
 'pools': 'test doc 1'}
{'ip': '7.98.202.101',
 'other': 'another field',
 'partition': 'Common partition',
 'pools': 'test doc 2'}
{'ip': '7.9.202.101',
 'other': 'another field',
 'partition': 'Cmmon partition',
 'pools': 'test doc 3'}
{'ip': '7.7.98.122',
 'other': 'another field',
 'partition': 'Como partition',
 'pools': 'test doc 4'}

Следующий синтаксис pymon go должен давать желаемые результаты (просто для удобства обработайте курсор как список). Поскольку $and является значением по умолчанию, в этом нет необходимости.

ip_value = '7.98'
partition_value = 'common'

ip_filter = {'ip': {'$regex': ip_value, "$options": "i"}}
partition_filter = {'partition': {'$regex': partition_value, "$options": "i"}}

query = {}
query.update(ip_filter)
query.update(partition_filter)
projection = {'_id': False}

mlist1 = list(coll.find(query, projection))

for mdoc in mlist1:
    pprint.pprint(mdoc)

Результатом является выбор следующих 2 документов:

{'ip': '10.2.7.98',
 'other': 'another field',
 'partition': 'this is coMMon',
 'pools': 'test doc 1'}
{'ip': '7.98.202.101',
 'other': 'another field',
 'partition': 'Common partition',
 'pools': 'test doc 2'}
...