1. ホーム
  2. python

PyMongo の upsert が "upsert must be an instance of bool" エラーを投げます。

2023-10-08 06:27:09

質問

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 で、辞書ではなく boolean を渡さなければなりません。コードを変更します。

self.word_counts[source].update({'date':posttime}, {"$inc" : words}, True)

または upsert=True をキーワード引数として渡します。

self.word_counts[source].update({'date':posttime}, {"$inc" : words}, upsert=True)

あなたの間違いは、おそらく update() の中にある MongoDB ドキュメント . JavaScript 版の update のようなオプションのパラメータを含むオブジェクトを第三引数にとります。 upsertmulti . しかし、Pythonでは関数にキーワード引数を渡すことができるので(位置引数しかないJavaScriptとは異なります)、これは不要であり、PyMongoはこれらのオプションをオプションの関数パラメータとして代わりに受け取ります。