Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PyMongo upsert throws "upsert must be an instance of bool" error

I'm running an update on my MongoDB from Python. I have this line:

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

But it throws this error:

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

But True looks like an instance of bool to me!

How should I correctly write this update?

like image 286
ComputationalSocialScience Avatar asked Feb 20 '11 07:02

ComputationalSocialScience


1 Answers

The third argument to PyMongo's update() is upsert and must be passed a boolean, not a dictionary. Change your code to:

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

Or pass upsert=True as a keyword argument:

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

Your mistake was likely caused by reading about update() in the MongoDB docs. The JavaScript version of update takes an object as its third argument containing optional parameters like upsert and multi. But since Python allows passing keyword arguments to a function (unlike JavaScript which only has positional arguments), this is unnecessary and PyMongo takes these options as optional function parameters instead.

like image 181
Brendan W. McAdams Avatar answered Oct 05 '22 16:10

Brendan W. McAdams