pymodm не может найти объект, в то время как pymongo успешно находит его - PullRequest
0 голосов
/ 17 января 2019

У меня проблема с получением объекта из экземпляра mongodb. Если я ищу этот объект с pymongo интерфейсом, все в порядке - объект может быть найден. Если попытаться сделать то же самое с pymodm - произойдет сбой с ошибкой.

Вот что я делаю:

from pymodm import connect, MongoModel, fields
from pymongo import MongoClient


class detection_object(MongoModel):
    legacy_id = fields.IntegerField()

client = MongoClient(MONGODB_URI)
db = client[MONGODB_DEFAULT_SCHEME]
collection = db['detection_object']
do = collection.find_one({'legacy_id': 1437424})
print(do)

connect(MONGODB_URI)
do = detection_object.objects.raw({'legacy_id': 1437424}).first()
print(do)

Первый вывод выводит это: {'_id': ObjectId('5c4099dcffa4fb11494d983d'), 'legacy_id': 1437424}. Однако во время выполнения этой команды: do = detection_object.objects.raw({'legacy_id': 1437424}).first() интерпретатор завершается со следующей ошибкой:

    Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/pymodm/queryset.py", line 127, in first
    return next(iter(self.limit(-1)))
StopIteration

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/konsof01/PycharmProjects/testthisfuckingshit/settings.py", line 29, in <module>
    do = detection_object.objects.raw({'legacy_id': 1437424}).first()
  File "/usr/local/lib/python3.7/site-packages/pymodm/queryset.py", line 129, in first
    raise self._model.DoesNotExist()
__main__.DoesNotExist

Как это может быть? Я пытаюсь запросить тот же объект, с тем же соединением и коллекцией. Есть идеи, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 25 мая 2019

Каждый документ в вашей коллекции 'creation_object' должен иметь атрибут '_cls'.Строковое значение, хранимое в этом атрибуте, должно быть

    __main__.classname

(имя класса в соответствии с вашим кодом - обнаружение_объекта).

Например, документ в вашей базе данных должен выглядеть следующим образом:

    {'_id': ObjectId('5c4099dcffa4fb11494d983d'), 'legacy_id': 1437424, '_cls': '__ main __.detection_object'}
0 голосов
/ 19 апреля 2019

вы можете попробовать это следующим образом:

detection_object.objects.raw({'legacy_id': "1437424"} ).first()

вероятно, legacy_id хранится в виде строки.

В противном случае, убедитесь, что имя БД присутствует в конце MONGO_URI, как это подчеркнуто в документах .

...