コードは大まかに次のようになります:
コードをコピー コードは次のとおりです:
functiongenerate_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,
)); ($seq[ 'value']['id'])) {
return $seq['value']['id']
}
$instance->insert(array(
'_id' => $namespace,
'id' => $option['init'],
));
var_dump(generate_auto_increment_id('foo')); 'bar', array('init' => 123)));
具体的な実装方法は主にMongoDBのfindAndModifyコマンドを使用します。MongoDBにオブジェクトを挿入する前に毎回IDを生成して_idに代入すればOKです。実装はアトミック性を満たしているので同時実行性の問題はありません。
さらに、findAndModify 自体が upsert パラメーターを提供します。これが true の場合、自動的に挿入できますが、初期値をカスタマイズできないため、記事の例では upsert を使用しません。
ところで、データベース「_seq」の名前はアンダースコアで始まるので、最初にリストされ区別しやすくなります。
参考: MongoDB による自動インクリメント
http://www.bkjia.com/PHPjc/323090.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/323090.html
技術記事コードはおおよそ次のとおりです。 コードをコピーします。 コードは次のとおりです。 ?php functiongenerate_auto_increment_id($namespace, array $option = array()) { $option += array( 'init' = 1, 'step' = 1 、); $。