Запрос Pymongo с датами не возвращает результатовPython

Программы на Python
Ответить
Anonymous
 Запрос Pymongo с датами не возвращает результатов

Сообщение Anonymous »

У меня есть следующий код Python 3.12.4, который вставляет JSON в базу данных mongoDB, развернутую локально через контейнер докеров с использованием образа dockerhub «mongo:4.4.7»

Код: Выделить всё

    myClient = pymongo.MongoClient("mongodb://%s:%s@%s" % (MONGO_USERNAME, MONGO_PASSWORD,                      MONGO_URL), timeoutMS=20000)
myDB = myClient[MONGO_CLIENT_NAME]
myCollection = myDB[MONGO_CLOLLECTION_NAME]

the_json = '{"id": "json1","thestr": "exampleStr","theint": 11,"thedate": "2024-10-15T11:59:59.953Z"}'
myRecord = json.loads(the_json)
# replace str date with python' datetime object
myRecord["thedate"] = datetime.strptime(myRecord["thedate"], "%Y-%m-%dT%H:%M:%S.%fZ")
insertionResult = myCollection.insert_one(myRecord)

startDate = datetime(2024, 9, 24, 7, 51, 5, 953123)
mySearch = myCollection.find({"thedate": {"$gt": startDate}})
Приведенный выше код возвращает записи правильно.
Проблема начинается при использовании одного и того же кода Python для одного и того же образа dockerhub и одного и того же Python. библиотеки в кластере Kubernetes. В этом случае никакие записи не возвращаются. Любопытно то, что при таком развертывании кластера, когда я выполняю «mySearch = myCollection.find()», он получает все записи в БД, поэтому проблем с подключением нет...
Для поиска я пробовал несколько типов дат, например:

Код: Выделить всё

startDate = datetime(2023, 10, 1, 10, 00, 23, 953123, pytz.UTC)
startDate = datetime.now(tz=pytz.utc)- timedelta(days=7)
startDate = datetime(2024, 9, 24, 7, 51, 5, 953123)
startDate = datetime.now() - timedelta(days=7)
На всякий случай дата всех контейнеров:

Код: Выделить всё

MY PC DATE:      lun 21 oct 2024 18:27:08 CEST+0200
DATE MONGODB RUN IN DOCKERS LOCALLY: Mon Oct 21 16:26:43 UTC 2024 +0000
DATE MONGODB RUN IN KUBERNETES: Mon Oct 21 16:29:24 UTC 2024 +0000
DATE PYTHON CODE KUBERNETES: Mon Oct 21 16:30:44 UTC 2024 +0000
Пример записи внутри БД:

Код: Выделить всё

{ "_id" : ObjectId("671740d94d474abb29c7357c"), "id" : "json1", "thestr" : "exampleFile", "theint" : 11, "thedate" : ISODate("2024-06-15T11:59:59.111Z")
Как видите, дата хранится с помощью ISOdate, что мне кажется правильным. Когда я выполняю следующую проверку с помощью Mongo CLI, тип данных даты, хранящейся в БД, тоже кажется нормальным:

Код: Выделить всё

> date_obj = db["collection-name"].findOne({ thestr: 'exampleFile' }).thedate
ISODate("2024-10-15T11:59:59.111Z")
> date_obj.toString()
Tue Oct 15 2024 11:59:59 GMT+0000 (UTC)
После развертывания и YAML-карты конфигурации:

Код: Выделить всё

apiVersion: apps/v1
kind: Deployment
metadata:
name: pythonclient
namespace: pythonclient
spec:
replicas: 1
selector:
matchLabels:
app: pythonclient
template:
metadata:
labels:
app: pythonclient
spec:
containers:
- name: pythonclient
image: python:latest
command:
- /bin/sh
- -c
- |-
cd /usr/app/src
pip install -r requirements.txt
python3 pythonclient.py
ports:
- containerPort: 8001
volumeMounts:
- mountPath: /usr/app/src
name: config
volumes:
- name: config
configMap:
name: pythonclient-config
---
apiVersion: v1
kind: ConfigMap
metadata:
name: pythonclient-config
namespace: pythonclient
data:
pythonclient.py: |

##here goes the python code that save/reads from the mongoDB##

requirements.txt: |

argon2-cffi==23.1.0
argon2-cffi-bindings==21.2.0
blinker==1.8.2
certifi==2024.8.30
cffi==1.17.1
click==8.1.7
dnspython==2.6.1
Flask==3.0.3
flask-swagger-ui==4.11.1
itsdangerous==2.2.0
Jinja2==3.1.4
joblib==1.4.2
MarkupSafe==2.1.5
minio==7.2.9
paho-mqtt==2.1.0
pycparser==2.22
pycryptodome==3.21.0
pymongo==4.10.1
python-crontab==3.2.0
python-dateutil==2.9.0.post0
pytz==2024.2
six==1.16.0
typing_extensions==4.12.2
urllib3==2.2.3
Werkzeug==3.0.3
Есть какие-нибудь сведения о том, что может произойти? почему он работает локально, а не в kubernetes?
Заранее спасибо!!!

Подробнее здесь: https://stackoverflow.com/questions/791 ... no-results
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»