27 votes

pymongo upsert lance l'erreur "upsert doit être une instance de bool", est-ce un bug?

J'exécute une mise à jour sur mon mongodb de python, j'ai cette ligne:

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

mais il jette cette erreur:

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

Mais True me semble un instane de boole!

Existe-t-il une autre façon d'exprimer correctement ce bool pour mongo? J'ai essayé true , True "true" et "True" tout cela en vain!

45voto

Brendan W. McAdams Points 4849

Upsert doit être un booléen, vous le définissez dans un dictionnaire. Remplacez le troisième argument par True:

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

Vous devriez trouver que l'erreur se résout.

9voto

Tzury Bar Yochay Points 3437

Selon http://api.mongodb.org/python/2.3/api/pymongo/collection.html#pymongo.collection.Collection.update vous devrait en effet passer upsert comme un mot-clé plutôt que de simplement Vrai, c'est

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

Ou

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

est une meilleure approche que de passage Vrai que si jamais vous souhaitez passer d'autres kwargs comme safe ou multi code peut se briser si l'ordre des arguments n'est pas conservée.

2voto

upsert doit être transmis comme paramètre de position, comme

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

ou comme argument de mot clé, comme ça

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

0voto

Andreas Jung Points 1

L'API ne vous dit rien sur le passage de upsert en dict. Veuillez d'abord lire la documentation de l'API:

http://api.mongodb.org/python/1.9%2B/api/pymongo/collection.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X