MongoDB _id字段自动生成



我正在尝试设置mongodb以测试其速度,并且我遇到了_id重复的问题。我没有设置,我让mongodb做,因为我不在乎。我有以下php代码:

<?php
$mongo = new Mongo();
$db = $mongo->selectDB("scrap_fighters");
$collection = $db->selectCollection('scores');
$data = array
(
  'user_id' => 1,
  'name' => 'John Doe',
  'score' => 120
);
$start = microtime(true);
for($x=0; $x < 1000; $x++)
{
  $data['unqiue'] = microtime();
  $result = $collection->insert($data, array('safe' => true));
}
?>

mongodb使用什么来生成他们的"唯一"id ?我甚至尝试用:

替换unique
$data['unqiue'] = rand(1, 1000000);

100%确定它正在工作,但在第一次写入后仍然失败。我是否可以不输入具有相同数据的记录而不自行生成唯一的id ?

MongoDB使用_id作为主键,因此它必须是唯一的。因为您没有指定它,所以它将自动生成。它由一个微秒时间戳和一个基于主机的哈希值组成,所以即使有多个主机同时插入,碰撞的可能性也非常低。

您正在使用的unique字段是什么?如果你希望它是一个主键,那就不要设置它。

关于重复项失败:我能想到发生这种情况的唯一原因是您之前在该集合上设置了一个索引,该索引要求某些字段(或字段组合)是唯一的。如果不需要,请将其移除。如果它是有效的(例如:user_id必须是唯一的),然后插入唯一的记录。

最新更新