#python #regex #mongodb-query #pymongo
Вопрос:
Я работаю с базой данных mongodb, где у меня есть определенное значение, в некоторых документах содержится поле parentDocId, а в других-нет. Помимо того, что ParentDocId имеет множество форм, я хотел бы получить 500 документов, в которых это поле не только существует, но и состоит из 6 или более цифр (никаких других символов). Это тот запрос, который, как я думал, сработает:
import pymongo
query = {"$and": [{'docReferences.parentDocId':{"$exists":True}},
{'docReferences.parentDocId':{"$regex": "^[0-9][0-9][0-9][0-9][0-9]*$"}}]}
Но примененный здесь запрос не работает:
cur = DATA_collection.find(query).limit(500)
tic=datetime.now()
elements = []
for el in cur:
elements.append(el)
tac=datetime.now()
print(f'{tac-tic}')
print(len(elements))
это дает мне список ОДНОГО и ТОГО ЖЕ ДОКУМЕНТА 500 раз и не отфильтровывает документы с идентификатором parentDocId, например «1111».
Есть идеи, что я делаю не так?
ПРИМЕЧАНИЕ: при использовании:
docReferences.parentDocId':{"$isNumber":True}
Я получаю:
unknown operator: $isNumber,
Ответ №1:
Шаблон регулярного выражения для шести или более цифр (только) таков ^[0-9]{6,}$
, поэтому вы можете попробовать:
import pymongo
query = {
"$and": [
{ 'docReferences.parentDocId' : { "$exists" : True } },
{ 'docReferences.parentDocId' : { "$regex": "^[0-9]{6,}$" } }
]
}