PyMongo upsert抛出“upsert必须是bool的一个实例”错误
我从Python运行MongoDB的更新。 我有这条线:
self.word_counts[source].update({'date':posttime},{"$inc" : words},{'upsert':True})
但它会抛出这个错误:
raise TypeError("upsert must be an instance of bool")
但是True
看起来就像是我的一个布尔实例!
我应该如何正确地写这个更新?
PyMongo的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文档中的update()
而导致的。 update
的JavaScript版本采用一个对象作为第三个参数,其中包含像upsert
和multi
这样的可选参数。 但是,由于Python允许将关键字parameter passing给一个函数(与只有位置参数的JavaScript不同),所以这是不必要的,PyMongo将这些选项作为可选的函数参数。
self.word_counts[source].update({'date':posttime},{"$inc" : words},**{'upsert':True})
要么
self.word_counts[source].update({'date':posttime},{"$inc" : words},upsert=True)
是一种比传递True更好的方法,就好像你希望传递其他的kwargs,比如safe
或者multi
代码可能会被破坏,如果args的顺序不被保留的话。
upsert应该作为位置parameter passing,像这样
self.word_counts[source].update( {'date':posttime}, {"$inc" : words}, True)
或者作为一个关键字参数,像这样
self.word_counts[source].update( {'date':posttime}, {"$inc" : words}, upsert=True)