sql >> Databáze >  >> NoSQL >> MongoDB

získat objekt mongodb _id po upsert s php

Ano – je to možné pomocí jediného dotazu.

MongoDB obsahuje findAndModify příkaz, který může atomicky upravit dokument a vrátit jej (ve výchozím nastavení skutečně vrátí dokument předtím, než byl změněn).

Ovladače PHP pro to neobsahují vhodnou metodu ve třídě kolekce (zatím -- podívejte se na tuto chybu), ale stále ji lze použít (všimněte si, že moje PHP je hrozné, takže jsem možná udělal chybu syntaxe v následujícím úryvku):

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


  1. mongodb - vytvořte dokument, pokud neexistuje, jinak jej vložte do pole

  2. Jak funguje parametr arrayFilters v MongoDB

  3. Jaký je rozdíl mezi findAndModify a update v MongoDB?

  4. Jak najít dotazy, které nepoužívají indexy nebo jsou pomalé v mongodb