はい-単一のクエリを使用して可能です。
MongoDBには、findAndModify
が含まれています ドキュメントをアトミックに変更して返すことができるコマンド(デフォルトでは、変更される前に実際にドキュメントを返します)。
PHPドライバーには、コレクションクラスにこのための便利なメソッドが含まれていません(まだ-このバグをチェックしてください)が、それでも使用できます(私のPHPはひどいので、構文エラーが発生した可能性があります)次のスニペットで):
$key = array( 'something' => 'unique' );
$data = array( '$inc' => array( 'someint' => 1 ) );
$result = $mongodb->db->command( array(
'findAndModify' => 'collection',
'query' => $key,
'update' => $data,
'new' => true, # To get back the document after the upsert
'upsert' => true,
'fields' => array( '_id' => 1 ) # Only return _id field
) );
$id = $result['value']['_id'];