MongoDB _id Field Auto Generation? - PullRequest
       5

MongoDB _id Field Auto Generation?

1 голос
/ 01 августа 2011

Я пытаюсь настроить 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 для генерации своих «уникальных» идентификаторов?Я даже пытался заменить unique на:

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

Чтобы быть на 100% уверенным, что он работал, но он все равно не удался после первой записи.я не могу самостоятельно вводить записи с одинаковыми данными без определенного поколения с уникальным идентификатором?

1 Ответ

1 голос
/ 01 августа 2011

MongoDB использует _id в качестве первичного ключа, и поэтому он должен быть уникальным.Поскольку вы не укажете его, он будет создан автоматически.Он состоит из метки времени микросекунды и хэша на основе хоста, поэтому даже при одновременном вставке нескольких хостов вероятность коллизии чрезвычайно мала.

Что это за поле unique, которое вы используете?Если вы хотите, чтобы это был первичный ключ, просто не устанавливайте его.

Об отказе от дубликатов: единственная причина, по которой я могу думать об этом, заключается в том, что вы ранее настроили индекс для этой коллекции, который требует некоторогополе (или комбинация полей), чтобы быть уникальным.Если не нужно, удалите его.Если он действителен (например, user_id должен быть уникальным), вставьте уникальные записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...