대지대치여하 소시 , 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)));
?>
实现方式 주요시이용 MongoDB중 findAndModify명령, 只要每次往MongoDB里insert对象前生成ID赋值给_id就OK了、因为它的实现满足原子性、所以不存在叶发问.
另外说明一点, findAndModify 본신 제공 료一个upsert참수, 为true的话可以自动insert, 那样就不不自定义初始值了,所以文中示例没有使用upsert.
BTW, 수계록 “_seq”적 성자 이하 划线开头, 这样列 표적 후후 배재 전면, 보다 용이한 분부료.
참고: Auto Increment with MongoDB