2010-06-02 47 views
7

Tôi đang làm việc với MongoDB bằng PHP bằng trình điều khiển pecl. Bản cập nhật của tôi đang hoạt động tốt, nhưng tôi muốn xây dựng một số lỗi khi kiểm tra (các) hàm của tôi.Cập nhật MongoDB: cách kiểm tra xem bản cập nhật có thành công hay không thành công không?

Tôi đã cố gắng sử dụng lastError() trong một chức năng khá đơn giản:

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

Nhưng khá nhiều bất kể những gì tôi cố gắng cập nhật (cho dù nó tồn tại hay không) tôi nhận được những kết quả cơ bản giống nhau:

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

Làm cách nào để biết cập nhật thành công hay thất bại?

Trả lời

3

trường "n" là số tài liệu được cập nhật và "updatedExisting" cho biết liệu tài liệu nào có được cập nhật hay không. bạn có thể kiểm tra các trường đó để xem liệu bản cập nhật có thành công hay không.

+1

Đó không hoàn toàn là ý của tôi. Đoạn mã trên sẽ hân hoan cập nhật cơ sở dữ liệu bất kể những gì tôi đưa vào mảng $ values, cho dù khóa tồn tại hay không (nếu nó không đơn giản thêm cặp giá trị/khóa vào tài liệu). Đọc lại tài liệu php.net Tôi đã xem qua tùy chọn "an toàn" và thêm nó vào mã ở trên để bây giờ trông như sau: $ collection-> update ($ query, array ('$ set' = > $ values), mảng ("safe" => true)); Nhưng tôi vẫn nhận được kết quả tương tự (NULL, true, 1, 1) mỗi lần tôi cố ý thực hiện cập nhật rác. – zmg

3

Làm cách nào để bạn biết những hàng nào bị ảnh hưởng với bản cập nhật MongoDB?

Như với tất cả ghi các hoạt động, getLastError lệnh trong MongoDB có thể khẳng định kết quả của của bản cập nhật hoạt động viết, mô tả ở đây:

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

Lệnh getLastError trả về trạng thái lỗi của hoạt động cuối cùng trên kết nối hiện tại. Theo mặc định MongoDB không cung cấp một đáp ứng để xác nhận sự thành công hay thất bại của một hoạt động ghi, các máy khách thường sử dụng getLastError kết hợp với các hoạt động ghi để đảm bảo rằng việc ghi thành công.

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

Các vấn đề liên quan