我正在尝试设置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吗?
答案 0 :(得分:1)
MongoDB使用_id
作为主键,因此它必须是唯一的。由于您没有指定它,它将自动生成。它由微秒时间戳和基于主机的散列组成,因此即使有多个主机同时插入,碰撞的可能性也非常低。
您使用的unique
字段是什么?如果你想让它成为主键,就不要设置它。
关于复制失败:我能想到这种情况的唯一原因是您之前在此集合上设置了索引,该索引要求某些字段(或字段组合)是唯一的。如果不需要,请将其删除。如果它有效(例如:user_id必须是唯一的),则插入唯一记录。