2016-02-10 3 views
2

Я просто модернизировал свой MongoDB и PyMongo до последней версии 3.2.1, чтобы иметь возможность использовать UpdateResult объект после вызова update_one(). Но почему-то возвращенный объект имеет одно поле, содержащее AttributeError.update_one PyMongo (в) возвращает UpdateResult с AttributeError

Взгляните на мои Pycharm screen. Вы можете видеть, что _UpdateResult__acknowledged

'Traceback (most recent call last): 
    File "/opt/pycharm-community-5.0.4/helpers/pydev/pydevd_resolver.py", line 191, in _getPyDictionary 
    attr = getattr(var, n) 
AttributeError: _UpdateResult__acknowledged' 

Это вызывает у меня проблемы, так как я пытаюсь поймать все исключения и каждый раз, когда мне нужно использовать update_one() в моем коде я получаю это исключение.

Это фрагмент моего кода:

QUERY = {id: '1234'} 
try: 
    record = mongoCollection.find_one(QUERY) 
    if record is None: 
     print 'Add new Record' 
    else: 
     updateResult = mongoCollection.update_one(
      QUERY, 
      {'$addToSet': {'info': getInfo()}} 
     ) 

     if updateResult['modified_count'] == 1: 
      mongoCollection.update_one(
       QUERY, 
       {'$inc': {'infoCount': 1}} 
      ) 
     print 'Record exists, updating if needed' 
except: 
    print 'Failed to add/update' 

К счастью, мне удалось найти обходной путь, который не вызывает это исключение будет поднят. Вместо использования update_one(), я могу использовать устаревшую функцию обновления() который возвращает только RAW результат от MongoDB, а затем вместо сравнения updateResult [ «modified_count»], я могу просто сравнить updateResult [» nModified ']. ?

Но это, безусловно, не рекомендуется использовать устаревшие функции ... :(

Любые мысли

ответ

2

Для тех, кто может столкнуться с той же ошибки, я был в состоянии получить ответ здесь: https://jira.mongodb.org/browse/PYTHON-1055

Короче говоря, поскольку UpdateResult не словарь питона и не реализует GetItem. проблема пытается сделать updateResult [ «modified_count»] == 1, вместо этого я Shou ld использовали updateResult.modified_count == 1, потому что UpdateResult.modified_count является свойством.

 Смежные вопросы

  • Нет связанных вопросов^_^