Ja -- Det er muligt at bruge en enkelt forespørgsel.
MongoDB inkluderer en findAndModify
kommando, der kan atomisk ændre et dokument og returnere det (som standard returnerer det faktisk dokumentet, før det er blevet ændret).
PHP-driverne inkluderer ikke en bekvem metode til dette på samlingsklassen (endnu -- tjek denne fejl), men den kan stadig bruges (bemærk at min PHP er forfærdelig, så jeg kan meget vel have lavet en syntaksfejl i følgende uddrag):
$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'];