2010-06-02 31 views
7

Pracuję z MongoDB w PHP przy użyciu sterownika pecl. Moje aktualizacje działają znakomicie, ale chciałbym utworzyć pewne sprawdzanie błędów w moich funkcjach.Aktualizacja MongoDB: jak sprawdzić, czy aktualizacja się powiedzie lub się nie powiedzie?

Próbowałem za pomocą lastError() w dość prostej funkcji:

function system_db_update_object($query, $values, $database, $collection) { 
    $connection = new Mongo(); 
    $collection = $connection->$database->$collection; 
    $connection->$database->resetError(); //Added for debugging 
    $collection->update(
     $query, 
     array('$set' => $values)); 
    //$errorArray = $connection->$database->lastError(); 
    var_dump($connection->$database->lastError());exit; // Var dump and /Exit/ 
} 

Ale dość dużo, niezależnie od tego, co staram się aktualizować (czy istnieje, czy nie) uzyskać te same podstawowe wyniki:

array(4) { 
    ["err"]=> 
    NULL 
    ["updatedExisting"]=> 
    bool(true) 
    ["n"]=> 
    float(1) 
    ["ok"]=> 
    float(1) 
} 

Skąd wiadomo, czy aktualizacja się powiodła, czy nie?

Odpowiedz

3

Pole "n" oznacza liczbę dokumentów, które zostały zaktualizowane, a "updatedExisting" informuje, czy jakikolwiek dokument został w ogóle zaktualizowany. powinieneś być w stanie sprawdzić te pola, aby sprawdzić, czy aktualizacja się powiodła, czy nie.

+1

To nie do końca miałem na myśli. Powyższy kod z radością zaktualizuje bazę danych niezależnie od tego, co wstawię do tablicy $ values, niezależnie od tego, czy klucz istnieje, czy nie (jeśli nie, po prostu dodaj parę wartość/klucz do dokumentu). Ponowne czytanie dokumentacji php.net Natknąłem się na "bezpieczną" opcję i dodałem ją do powyższego kodu, więc wygląda teraz tak: $ kolekcja-> aktualizacja (zapytanie $, tablica ('$ zestaw' = > $ wartości), array ("safe" => true)); Ale nadal otrzymuję takie same wyniki (NULL, true, 1, 1) za każdym razem, gdy celowo przeprowadzam aktualizację śmieci. – zmg

3

Skąd wiadomo, na jakie wiersze mają wpływ aktualizacje MongoDB?

jak w przypadku wszystkich operacji zapisu, getLastError polecenie MongoDB może potwierdzić wynik operacji zapisu na update, opisane tutaj:

http://docs.mongodb.org/manual/applications/update/

Komenda getLastError zwraca status błędu z ostatniej operacji na bieżące połączenie. Domyślnie MongoDB nie dostarcza odpowiedzi, aby potwierdzić powodzenie lub niepowodzenie operacji zapisu, klienci zazwyczaj używają getLastError w połączeniu z operacjami zapisu, aby upewnić się, że zapis się powiedzie.

http://docs.mongodb.org/manual/reference/command/getLastError/#getLastError

Powiązane problemy