MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

obtenir l'objet mongodb _id après upsert avec php

Oui -- C'est possible en utilisant une seule requête.

MongoDB inclut un findAndModify commande qui peut modifier un document de manière atomique et le renvoyer (par défaut, elle renvoie en fait le document avant qu'il ne soit modifié).

Les pilotes PHP n'incluent pas de méthode pratique pour cela sur la classe de collection (pour l'instant - consultez ce bogue), mais il peut toujours être utilisé (notez que mon PHP est terrible, donc j'ai très bien pu faire une erreur de syntaxe dans l'extrait suivant) :

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