MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

ottieni l'oggetto mongodb _id dopo l'upsert con php

Sì:è possibile utilizzare una singola query.

MongoDB include un findAndModify comando che può modificare atomicamente un documento e restituirlo (per impostazione predefinita restituisce effettivamente il documento prima che sia stato modificato).

I driver PHP non includono un metodo conveniente per questo nella classe di raccolta (ancora -- controlla questo bug), ma possono ancora essere usati (nota che il mio PHP è terribile, quindi potrei benissimo aver commesso un errore di sintassi nel seguente snippet):

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