76

PythonからMongoDBで更新を実行しています。私はこの行を持っています:

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

しかし、それはこのエラーをスローします:

raise TypeError("upsert must be an instance of bool")

しかしTrue、私にはブールのインスタンスのように見えます!

このアップデートを正しく書くにはどうすればよいですか?

4

3 に答える 3

121

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)

update()あなたの間違いは、MongoDBのドキュメントを読んだことが原因である可能性があります。JavaScriptバージョンのupdateは、オブジェクトを3番目の引数として取り、upsertやなどのオプションのパラメータを含みますmulti。ただし、Pythonではキーワード引数を関数に渡すことができるため(位置引数しかないJavaScriptとは異なり)、これは不要であり、PyMongoは代わりにこれらのオプションをオプションの関数パラメーターとして使用します。

于 2011-02-20T07:39:07.680 に答える
17

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)

safe引数の順序が保持されていない場合multiにコードが破損する可能性があるなど、他のkwargを渡したい場合のように、Trueを渡すよりも優れたアプローチです。

于 2012-10-23T11:02:50.240 に答える
4

upsertは、次のように、いずれかの位置パラメータとして渡す必要があります。

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

またはキーワード引数として、そのように

self.word_counts[source].update(
    {'date':posttime},
    {"$inc" : words},
    upsert=True)
于 2014-02-09T16:34:48.360 に答える