2010-06-02 31 views
7

PHP'de MongoDB ile pecl sürücüsünü kullanarak çalışıyorum. Güncellemelerim harika çalışıyor, ancak işlevlerime bazı hatalar eklemek istiyorum.MongoDB güncellemesi: Bir güncellemenin başarılı olup olmadığını nasıl kontrol edersiniz?

Ben oldukça basit bir işlevde LastError() kullanarak denedim:

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/ 
} 

Ama hemen hemen bakılmaksızın ben bu aynı temel sonuçları elde (varolduğundan olsun veya olmasın) güncelleştirmeye çalıştığınızda ne:

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

Güncelleştirmenin başarılı olup olmadığını nasıl anlarım?

cevap

3

"n" alanı, güncelleştirilen belgelerin sayısıdır ve "updatedExisting", herhangi bir belgenin hiç güncelleştirilip güncellenmediğini belirtir. Bir güncellemenin başarılı olup olmadığını görmek için bu alanları kontrol edebilmeniz gerekir.

+1

Bu tam olarak ne demek istemedim. Yukarıdaki kod, anahtar var olup olmadığına bakılmaksızın $ değerleri dizisine koyduğumdan bağımsız olarak veritabanını güncelleyecektir (eğer bu değer sadece belge/değer çiftini belgeye eklemiyorsa). php.net belgelerini yeniden okuyorum "güvenli" seçeneğiyle yeniden karşılaştım ve şimdi yukarıdaki koda ekledim, böylece şunun gibi görünüyor: $ collection-> update ($ query, array ('$ set' =) > $ değerler), dizi ("güvenli" => doğru)); Ancak, kasıtlı olarak bir çöp güncelleştirmesi yaptığımda hala aynı sonuçları (NULL, true, 1, 1) alıyorum. – zmg

3

MongoDB güncellemesinde hangi satırların etkilendiğini nereden biliyorsunuz? Bütün olduğu gibi

yazma işlemleri, MongoDB içinde getLastError komut Güncelleme'nin yazma işleminin sonucunu teyit edebilir, burada açıklanan:

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

getLastError komut son operasyonun hata durumunu döndürür geçerli bağlantı. Varsayılan olarak MongoDB, bir yazma işleminin başarısını veya başarısızlığını doğrulamak için bir yanıt vermez, istemcilerin genellikle yazımın başarılı olmasını sağlamak için yazma işlemleriyle birlikte getLastError kullanır.

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

İlgili konular