PythonからMongoDBの更新を実行しています。私はこの行を持っています:
self.Word_counts[source].update({'date':posttime},{"$inc" : words},{'upsert':True})
ただし、次のエラーがスローされます。
raise TypeError("upsert must be an instance of bool")
しかし、True
は私にとってはboolのインスタンスのように見えます!
この更新プログラムを正しく書き込む方法を教えてください。
PyMongoの3番目の引数 update()
はupsert
であり、辞書ではなくブール値を渡す必要があります。コードを次のように変更します。
_self.Word_counts[source].update({'date':posttime}, {"$inc" : words}, True)
_
または、_upsert=True
_をキーワード引数として渡します。
_self.Word_counts[source].update({'date':posttime}, {"$inc" : words}, upsert=True)
_
MongoDB docs のupdate()
を読んだことが原因である可能性があります。 JavaScriptバージョンのupdate
は、upsert
やmulti
などのオプションのパラメーターを含むオブジェクトを3番目の引数として受け取ります。しかしPythonは位置引数のみを持つJavaScriptとは異なり)キーワード引数を関数に渡すことができるため、これは不要であり、PyMongoは代わりにこれらのオプションをオプションの関数パラメーターとして使用します。
http://api.mongodb.org/python/2.3/api/pymongo/collection.html#pymongo.collection.Collection.update によると、実際には単なるtrueではなくキーワードとしてupsertを渡す必要があります、 あれは
self.Word_counts[source].update({'date':posttime},{"$inc" : words},**{'upsert':True})
または
self.Word_counts[source].update({'date':posttime},{"$inc" : words},upsert=True)
argの順序が保持されない場合、safe
やmulti
などの他のkwargsコードが壊れる可能性があるため、Trueを渡すよりも優れたアプローチです。
upsertは、次のように位置パラメータとして渡す必要があります
self.Word_counts[source].update(
{'date':posttime},
{"$inc" : words},
True)
または、キーワード引数として
self.Word_counts[source].update(
{'date':posttime},
{"$inc" : words},
upsert=True)