MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

obter o objeto mongodb _id após upsert com php


Sim -- é possível usar uma única consulta.

MongoDB inclui um findAndModify comando que pode modificar atomicamente um documento e devolvê-lo (por padrão, ele realmente retorna o documento antes de ser modificado).

Os drivers PHP não incluem um método conveniente para isso na classe de coleção (ainda -- confira este bug), mas ainda pode ser usado (observe que meu PHP é terrível, então eu posso muito bem ter cometido um erro de sintaxe no trecho a seguir):
$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'];