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'
надеюсь, это поможет.