Com*_*nce 68 python mongodb pymongo
我在Python上运行MongoDB的更新.我有这条线:
self.word_counts[source].update({'date':posttime},{"$inc" : words},{'upsert':True})
Run Code Online (Sandbox Code Playgroud)
但它抛出了这个错误:
raise TypeError("upsert must be an instance of bool")
Run Code Online (Sandbox Code Playgroud)
但True看起来像是bool的一个例子!
我该如何正确编写此更新?
Bre*_*ams 102
PyMongo的第三个参数update()是upsert并且必须传递一个布尔值,而不是一个字典.将您的代码更改为:
self.word_counts[source].update({'date':posttime}, {"$inc" : words}, True)
Run Code Online (Sandbox Code Playgroud)
或者upsert=True作为关键字参数传递:
self.word_counts[source].update({'date':posttime}, {"$inc" : words}, upsert=True)
Run Code Online (Sandbox Code Playgroud)
您的错误可能是由MongoDB文档update()中的阅读引起的.JavaScript版本将对象作为其第三个参数包含可选参数,如和.但是由于Python允许将关键字参数传递给函数(与只有位置参数的JavaScript不同),这是不必要的,PyMongo将这些选项作为可选函数参数.updateupsertmulti
Tzu*_*hay 15
根据http://api.mongodb.org/python/2.3/api/pymongo/collection.html#pymongo.collection.Collection.update你确实应该将upsert作为关键字传递而不仅仅是True,即
self.word_counts[source].update({'date':posttime},{"$inc" : words},**{'upsert':True})
Run Code Online (Sandbox Code Playgroud)
要么
self.word_counts[source].update({'date':posttime},{"$inc" : words},upsert=True)
Run Code Online (Sandbox Code Playgroud)
是一种比传递True更好的方法,就好像你希望传递其他kwargs一样,safe或者multi如果没有保留args的顺序,代码可能会中断.
| 归档时间: |
|
| 查看次数: |
39750 次 |
| 最近记录: |