API для Pymongo ошибку TypeError: Unhashable дикт

Я пишу API для своего программного обеспечения, чтобы было проще получить доступ к mongodb.

у меня есть эта строка:

def update(self, recid):        
    self.collection.find_and_modify(query={"recid":recid}, update={{ "$set": {"creation_date":str( datetime.now() ) }}} )

, который бросает TypeError: Unhashable type: 'dict'.

эта функция просто предназначена для поиска документа, который recid соответствует аргументу и обновляет его поле creation_date.

почему происходит эта ошибка?

1 ответов


это просто, вы добавили дополнительные / избыточные фигурные скобки, попробуйте следующее:

self.collection.find_and_modify(query={"recid":recid}, 
                                update={"$set": {"creation_date": str(datetime.now())}})

UPD (объяснение, предполагая, что вы находитесь на python>=2.7):

ошибка возникает, потому что python думает, что вы пытаетесь сделать набор с {} Примечание:

классы set реализуются с помощью словарей. Соответственно, требования к элементам набора такие же, как и к словарю ключи; а именно, что элемент определяет как _ _ eq__ (), так и __гашиш.)(__

иными словами, элементы набора должны быть hashable, например:int, string. И вы проходите мимо dict, что не hashable и не может быть элементом множества.

Также см. Этот пример:

>>> {{}}
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'

надеюсь, это поможет.