2013-07-16 11 views
6

Piszę API dla mojego oprogramowania, aby łatwiej było uzyskać dostęp do mongodb.Pymongo API TypeError: Unhashable dict

mam ten wiersz:

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

Która rzuca TypeError: Unhashable type: 'dict'.

Ta funkcja służy po prostu do znalezienia dokumentu, który jest recid, dopasowanego do argumentu i zaktualizowania pola creation_date.

Dlaczego ten błąd występuje?

Odpowiedz

10

To proste, które zostały dodane dodatkowe/zbędnych nawiasów klamrowych, spróbuj tego:

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

UPD (wyjaśnienie, zakładając, że są na python> = 2.7):

Błąd występuje, ponieważ Python myśli staramy się, aby zestaw z {} notacji:

The set classes are implemented using dictionaries. Accordingly, the requirements for set elements are the same as those for dictionary keys; namely, that the element defines both __eq__() and __hash__().

innymi słowy, elementy zestawu powinny być hashable: np int, string. I przechodzisz do niego dict, który nie jest zgodny z haseł i nie może być elementem zestawu.

Również patrz poniższy przykład:

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

nadzieję, że pomoże.

+0

Wow, genialny! Ale dlaczego to powodowało taki problem? – RockJake28

+1

Ulepszyłem odpowiedź, sprawdź. – alecxe

+0

Dzięki, to wyjaśniło mi również wiele innych rzeczy! – RockJake28