web-dev-qa-db-fra.com

Erreur d'écriture en bloc de Mongodb

J'exécute l'écriture en bloc

bulk = new_packets.initialize_ordered_bulk_op()

bulk.insert(packet)

output = bulk.execute()

et obtenir une erreur que j'interprète comme signifiant que le paquet n'est pas un dict. Cependant, je sais que c'est un dicton. Quel pourrait être le problème?

Voici l'erreur:

    BulkWriteError                            Traceback (most recent call last)
    <ipython-input-311-93f16dce5714> in <module>()
          2 
          3 bulk.insert(packet)
    ----> 4 output = bulk.execute()

    C:\Users\e306654\AppData\Local\Continuum\Anaconda\lib\site-packages\pymongo\bulk.pyc in execute(self, write_concern)
583         if write_concern and not isinstance(write_concern, dict):
584             raise TypeError('write_concern must be an instance of dict')
    --> 585         return self.__bulk.execute(write_concern)

    C:\Users\e306654\AppData\Local\Continuum\Anaconda\lib\site-packages\pymongo\bulk.pyc in execute(self, write_concern)
429             self.execute_no_results(generator)
430         Elif client.max_wire_version > 1:
    --> 431             return self.execute_command(generator, write_concern)
432         else:
433             return self.execute_legacy(generator, write_concern)

    C:\Users\e306654\AppData\Local\Continuum\Anaconda\lib\site-packages\pymongo\bulk.pyc in execute_command(self, generator, write_concern)
296                 full_result['writeErrors'].sort(
297                     key=lambda error: error['index'])
    --> 298             raise BulkWriteError(full_result)
299         return full_result
300 

    BulkWriteError: batch op errors occurred
15
David Makovoz

Cela peut être dû à plusieurs raisons ...
le mieux est que vous essayiez ... d'attraper ... l'exception et de vérifier les erreurs

try:
    bulk.execute()
except BulkWriteError as bwe:
    print(bwe.details)
    #you can also take this component and do more analysis
    #werrors = bwe.details['writeErrors']
    raise
15
Samer Aamar

Vous devriez vérifier 2 choses:

  1. Doublons, si vous définissez votre propre clé.
  2. Être capable de gérer des types personnalisés, dans mon cas, j'essayais de passer un objet de type hachage qui ne pouvait pas être converti en un objectId valide, et cela me menait au premier point et je me sentais dans un cercle vicieux (je résous il convertit myObject en chaîne.

L'insertion une à une vous donnera une idée de ce qui se passe.

12
Miguel Angel

Ok, le problème était que j'assignais _id explicitement et il s'avère que la chaîne était supérieure à la limite de 12 octets, ma mauvaise.

9
David Makovoz