sql >> Base de Datos >  >> NoSQL >> MongoDB

obtener el objeto mongodb _id después de upsert con php

Sí, es posible con una sola consulta.

MongoDB incluye un findAndModify comando que puede modificar atómicamente un documento y devolverlo (por defecto, en realidad devuelve el documento antes de que haya sido modificado).

Los controladores de PHP no incluyen un método conveniente para esto en la clase de colección (todavía, revise este error), pero aún se puede usar (tenga en cuenta que mi PHP es terrible, por lo que es muy posible que haya cometido un error de sintaxis en el siguiente fragmento):

$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'];