разница между поиском оболочки mongodb с регулярным выражением и той же самой с python - PullRequest
0 голосов
/ 24 декабря 2018

Данные: у меня есть 3 документа mongodb, два из них содержат '04'.

Он отлично работает с оболочкой mongo, но не тогда, когда я пишу его с помощью python ...

Давайтесм. мои документы, и регулярное выражение находит результаты, как и ожидалось:

MongoDB shell version: 3.2.11
connecting to: 192.168.79.2/test
> db.virtuel.find({},{_id:0 , d:1})
    { "d" : "0409" }
    { "d" : "0204" }
    { "d" : "0710" }

> db.virtuel.find({ d: { $regex: '^\([0-9][0-9]\)*\(04\)\([0-9][0-9]\)*$' } }).count()
    2

НО: когда я хочу закодировать то же самое в python:

import pymongo
myclient = pymongo.MongoClient("mongodb://192.168.79.2:27017/")
mydb = myclient["test"]
mycol = mydb["virtuel"]

regex_pd='^\([0-9][0-9]\)*\(04\)\([0-9][0-9]\)*$'

myquery={}
myquery['d'] = {
    u'$regex': regex_pd }
dataset = mycol.find(myquery)
print("Number of elements : " + str(dataset.count()))
mydb.close()

Это возвращает 0 вместо 2, как ожидалось... Конечно, я допустил ошибку, но с какой?

...