Я использую MongoDB вместе с PHP.Чтобы создать уникальный документ для каждого пользователя, я устанавливаю уникальное имя пользователя с
$db->ensureIndex(array("username" => 1), array("unique" => 1, "dropDups" => 1));
Однако, если есть дубликат, значение _id, возвращаемое для пользователя, равно значению записи, которая получиланикогда не создавался, а не записи, которая уже существует в БД.
Вот вся функция:
function register_user($username, $password, $first_name, $last_name, $email)
{
$m = new Mongo();
$db = $m->users->details;
$db->ensureIndex(array("username" => 1), array("unique" => 1, "dropDups" => 1));
$user_doc = array( "username" => $username, "password" => $password, "first_name" => $first_name, "last_name" => $last_name, "email" => $email);
$db->insert($user_doc);
return $user_doc["_id"]; // here i return the _id
}
Как мне создать базу данных пользователей, в которой нет повторяющихся имен пользователей??
РЕДАКТИРОВАТЬ:
Вот мое временное решение.Я положил его туда, где раньше была вставка.
try
{
$db->insert($user_doc,array('safe'=>1));
}
catch ( MongoCursorException $e )
{
// if this did not work, we already have that user inside and want to get his _id
$user = $db->findOne(array('username' => $username, 'password' => $password));
return $user["_id"];
}
Если я попытаюсь вставить ее с помощью безопасной опции, она всегда умрет.Используя процедуру try-catch, я пытаюсь вставить и, если она не работает, вручную найти _id по имени пользователя.Я все еще не удовлетворен этим решением, поэтому было бы здорово, если бы более опытные пользователи MongoDB могли бы дать какой-то совет.