Ja – det är möjligt att använda en enda fråga.
MongoDB innehåller en findAndModify
kommando som kan atomiskt modifiera ett dokument och returnera det (som standard returnerar det faktiskt dokumentet innan det har modifierats).
PHP-drivrutinerna inkluderar inte en bekväm metod för detta i samlingsklassen (ännu -- kolla in den här buggen), men den kan fortfarande användas (observera att min PHP är hemsk, så jag kan mycket väl ha gjort ett syntaxfel i följande utdrag):
$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'];