2015-05-20 15 views
7

tôi đang thực hiện với số lượng lớn ghiMongoDB số lượng lớn ghi lỗi

bulk = new_packets.initialize_ordered_bulk_op()

bulk.insert(packet)

output = bulk.execute()

và nhận được một lỗi mà tôi giải thích có nghĩa là gói đó không phải là một dict. Tuy nhiên, tôi biết rằng đó là một dict. Điều gì có thể là vấn đề?

Dưới đây là lỗi:

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

gói là gì? đầu ra của 'print (packet)' là gì? – styvane

+0

Ok, vấn đề là tôi đã gán _id một cách rõ ràng và nó chỉ ra rằng chuỗi lớn hơn giới hạn 12 byte, xấu của tôi. –

+0

PyMongo [thừa nhận đây là vấn đề phổ biến trong tài liệu của họ và cung cấp thông tin chi tiết] (http://api.mongodb.org/python/current/faq.html#why-does-pymongo-add-an-id-field-to -tất cả các tài liệu của tôi) là tại sao điều này xảy ra. – tutuDajuju

Trả lời

2

Ok, vấn đề là tôi đã được gán _id một cách rõ ràng và nó quay ra rằng chuỗi lớn hơn giới hạn 12-byte, xấu của tôi.

+1

wow, tôi phải đối mặt chính xác cùng một vấn đề, cảm ơn bạn đã giải pháp! –

5

Bạn nên kiểm tra 2 điều:

  1. Bản sao, nếu bạn đang xác định chìa khóa riêng của bạn.
  2. Có thể quản lý các loại tùy chỉnh, Trong trường hợp của tôi, tôi đã cố chuyển một đối tượng kiểu băm không thể chuyển đổi thành đối tượng hợp lệ, và điều đó dẫn tôi đến điểm đầu tiên và tôi cảm thấy một vòng luẩn quẩn (tôi giải quyết nó chuyển đổi myObject để chuỗi.

Chèn từng người một sẽ cho bạn ý tưởng những gì đang xảy ra.

6

nó có thể có nhiều lý do ...
tốt nhất là bạn nên thử .. .catch ... ngoại lệ và kiểm tra lỗi

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 
Các vấn đề liên quan