Mongodb批量写入错误

时间:2015-05-20 16:48:23

标签: mongodb pymongo

我正在执行批量写入

set java_arguments=%HBASE_OPTS% -classpath "%CLASSPATH%" %CLASS% %hbase-command-arguments%

bulk = new_packets.initialize_ordered_bulk_op()

bulk.insert(packet)

并得到一个错误,我解释为意味着数据包不是一个字典。但是,我知道这是一个字典。可能是什么问题?

这是错误:

output = bulk.execute()

5 个答案:

答案 0 :(得分:14)

可能有很多原因......
最好的是你尝试...捕捉...异常并检查错误

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

答案 1 :(得分:10)

你应该检查两件事:

  1. 重复,如果您要定义自己的密钥。
  2. 能够管理自定义类型,在我的情况下,我试图传递一个无法转换为有效的objectId的哈希类型对象,这引导我到第一点,我感到陷入了一个恶性循环(我解决了将myObject转换为字符串的问题。
  3. 逐个插入可以让您了解正在发生的事情。

答案 2 :(得分:8)

好吧,问题是我明确地分配了_id,结果是字符串大于12字节限制,我的错。

答案 3 :(得分:0)

尝试使用调试器,它应该为您errmsg提供准确的错误,并且op对象正在尝试插入。

答案 4 :(得分:0)

除上述之外,请检查您的 unique indexes。如果您进行批量插入并指定了数据中不存在的索引,则会出现此错误。

例如,我不小心将 name 指定为 unique index,并且我插入的数据没有名为 name 的键。在将第一个条目插入 mongo 后,它会抛出此错误,因为从技术上讲,您插入的是另一个 unique namenull 的文档。

这是我的模型定义的一部分,我在其中声明了 unique index

self.conn[self.collection_name].create_index(
            [("name", ASCENDING)],
            unique=True,
        )

这里是抛出的错误的详细信息:

{'writeErrors': [{'index': 1, 'code': 11000, 'keyPattern': {'name': 1},
'keyValue': {'name': None}, 'errmsg': 'E11000 duplicate key error collection:
troposphere.temp index: name_1 dup key: { name: null }'
...

更多资源: MongoDB E11000 duplicate key error