16

mongodb に簡単にアクセスできるように、ソフトウェアの API を作成しています。

私はこの行を持っています:

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 フィールドを更新することを目的としています。

なぜこのエラーが発生するのですか?

4

1 に答える 1

21

簡単です。余分な/冗長な中括弧を追加しました。これを試してください:

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

UPD (説明、python>=2.7 を使用していると仮定):

エラーが発生するのは、Python が次の{}表記法でセットを作成しようとしていると判断したためです。

セット クラスは辞書を使用して実装されます。したがって、セット要素の要件は辞書キーの要件と同じです。つまり、要素が __eq__() と __hash__() の両方を定義していること。

言い換えれば、セットの要素はハッシュ可能でなければなりませintstring。これはdictハッシュ可能ではなく、セットの要素にすることはできません。

また、次の例を参照してください。

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

それが役立つことを願っています。

于 2013-07-16T10:32:25.950 に答える