Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 插入文档时pymongo中的BulkWriteError_Mongodb_Pymongo_Pymongo 3.x - Fatal编程技术网

Mongodb 插入文档时pymongo中的BulkWriteError

Mongodb 插入文档时pymongo中的BulkWriteError,mongodb,pymongo,pymongo-3.x,Mongodb,Pymongo,Pymongo 3.x,我试图从mongodb中获取一些虚拟id,为此我编写了以下代码片段,但它抛出了BulkWriteError def get_unique_ids(count): return db.insert_many([{}] * count).inserted_ids 例外情况: execute_command raise BulkWriteError(full_result) pymongo.errors.BulkWriteError: batch op errors occurred

我试图从mongodb中获取一些虚拟id,为此我编写了以下代码片段,但它抛出了BulkWriteError

def get_unique_ids(count):
    return db.insert_many([{}] * count).inserted_ids
例外情况:

execute_command
    raise BulkWriteError(full_result)
pymongo.errors.BulkWriteError: batch op errors occurred
但是下面的代码工作得很好,我想知道两者之间的区别是什么

def get_unique_ids(count):
    return db.insert_many([{} for i in range(count)]).inserted_ids

您确实意识到,
ObjectId
值实际上是“客户端”生成的,而不是在服务器上生成的。因此,不需要仅为了获得一系列
ObjectId
值而在服务器上“强制”插入。只需在循环中创建新的
ObjectId
实例。我确实使用ObjectId()获取唯一ID,但我没有任何文档源知道bson。ObjectId生成唯一ID,因为在我尝试将其移动到mongodb的同一服务器中,有多个工作者处理请求。请提供“ObjectId值实际上是在客户端生成的”的来源?来源?驱动程序文档本身。MongoDB文档和8年左右的大量参考资料。“服务器”在“所有”支持的驱动程序中生成
\u id
值的唯一时间实际上是“upsert”。然后,仅当您没有在查询参数中显式提供
\u id
时。只需使用
.map()
并重复从
bson
包返回新
ObjectId
实例的值。我不知道你为什么在写东西之外还要这么做,但事情就是这样做的。所以我可以使用ObjectId()来获取新的id,即使id同时在多个Worker中的多个服务器中生成,它也是唯一的?请阅读定义。不可能收到重复的值。这就是我们使用它们的原因。这里已经回答了一个问题。