The code is roughly as follows:
Copy CodeThe code is as follows:
<?php
function generate_auto_increment_id ($namespace, array $option = Array ())
{
$option + = Array (
' Init ' => 1,
' Step ' => 1,
);
$instance = new Mongo ();
$instance = $instance->selectcollection (' _seq ', ' seq ');
$seq = $instance->db->command (Array (
' findandmodify ' => ' seq ',
' Query ' => array (' _id ' => $namespace),
' Update ' => array (' $inc ' => array (' ID ' => $option [' Step ']),
' New ' => true,
));
if (Isset ($seq [' Value '] [' ID '])} {
return $seq [' value '] [' id '];
}
$instance->insert Array (
' _id ' => $namespace,
' ID ' => $option [' Init '],
));
return $option [' init '];
}
Var_dump (generate_auto_increment_id (' foo '));
Var_dump (generate_auto_increment_id (' Bar ', Array (' init ' => 123));
?>
Its implementation is mainly the use of MongoDB findandmodify command, as long as each MongoDB insert object before the creation of an ID assignment to the _id is OK, because its implementation to meet the atomicity, so there is no concurrency problem.
In addition, the findandmodify itself provides a upsert parameter, which is true to insert automatically, but that cannot customize the initial value, so the example in this article does not use Upsert.
BTW, the name of the database "_seq" begins with an underscore, so that the list will be in front of you and be easier to distinguish.
Reference: Auto Increment with MongoDB