MongoDB _id现场自动生成?

时间:2011-07-31 23:17:47

标签: php mongodb

我正在尝试设置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?我甚至尝试用以下内容替换唯一的:

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

要100%确定它正常工作,但在第一次写入后仍然失败。我自己不能输入具有相同数据的记录而没有特定的生成唯一ID吗?

1 个答案:

答案 0 :(得分:1)

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

您使用的unique字段是什么?如果你想让它成为主键,就不要设置它。

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