2013-07-16 6 views
6

Ich schreibe eine API für meine Software, so dass es einfacher ist, auf mongodb zuzugreifen.Pymongo API TypeError: Nicht haschbares dict

Ich habe diese Zeile:

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

Welche TypeError: Unhashable type: 'dict' wirft.

Diese Funktion dient nur dazu, das Dokument zu finden, dessen Rezident mit dem Argument übereinstimmt, und aktualisiert das Feld creation_date.

Warum tritt dieser Fehler auf?

Antwort

10

Es ist ganz einfach, Sie haben extra/redundante geschweiften Klammern hinzugefügt, versuchen Sie dies:

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

UPD (Erklärung, vorausgesetzt, Sie auf Python sind> = 2.7):

Der Fehler tritt auf, weil Python denkt Sie versuchen, einen Satz mit {} Notation zu machen:

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__().

mit anderen Worten, die Elemente eines Satzes sollte hashable sein: zB int, string. Und Sie übergeben eine dict, die nicht hashable ist und kein Element eines Satzes sein kann.

Auch finden Sie in diesem Beispiel:

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

Hoffnung, das hilft.

+0

Wow, brilliant! Aber warum verursachte das ein solches Problem? – RockJake28

+1

Ich habe die Antwort verbessert, bitte überprüfen. – alecxe

+0

Danke, das hat mir auch noch viele andere Dinge aufgeklärt! – RockJake28

Verwandte Themen