2015-05-20 19 views
7

che sto eseguendo scrittura massaMongoDB errore di massa scrittura

bulk = new_packets.initialize_ordered_bulk_op()

bulk.insert(packet)

output = bulk.execute()

e ottenere un errore che interpreto nel senso che non è un pacchetto dict. Tuttavia, so che è un dittico. Quale potrebbe essere il problema?

Ecco l'errore:

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 
+0

cos'è il pacchetto? qual è l'output di 'print (pacchetto)'? – styvane

+0

Ok, il problema era che stavo assegnando _id esplicitamente e si scopre che la stringa era più grande del limite di 12 byte, il mio male. –

+0

PyMongo [riconosce che questo è un problema comune nei loro documenti e offre approfondimenti] (http://api.mongodb.org/python/current/faq.html#why-does-pymongo-add-an-id-field-to -all-of-my-documents) sul motivo per cui ciò si verifica. – tutuDajuju

risposta

2

Ok, il problema era che ero assegnando _id esplicitamente e si scopre che la stringa era più grande limite di 12 byte, il mio male.

+1

wow, ho affrontato esattamente lo stesso problema, grazie per la soluzione! –

5

si dovrebbe verificare 2 cose:

  1. duplicati, se si sta definendo la propria chiave.
  2. Essere in grado di gestire i tipi personalizzati, Nel mio caso stavo cercando di passare un oggetto di tipo hash che non poteva essere convertito in un objectId valido, e che mi stava portando al primo punto e mi sentivo in un circolo vizioso (ho risolto la conversione myObject a stringa.

Inserimento di uno ad uno vi darà l'idea che cosa sta accadendo.

6

può essere molti motivi ...
la cosa migliore è che si prova .. .catch ... l'eccezione e controlla gli errori

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 
Problemi correlati