2010-06-02 16 views
7

Estoy trabajando con MongoDB en PHP usando el controlador pecl. Mis actualizaciones funcionan muy bien, pero me gustaría crear algunas comprobaciones de errores en mis funciones.Actualización de MongoDB: ¿cómo verificar si una actualización tiene éxito o falla?

He intentado usar LastError() en una función bastante simple:

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

Pero más o menos independientemente de lo que trato de actualizar (si existe o no) consigo estos mismos resultados básicos:

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

¿Cómo sé si la actualización se realizó correctamente o no?

Respuesta

3

el campo "n" es el número de documentos que se actualizaron, y "updatedExisting" indica si algún documento se actualizó en absoluto. debería poder verificar esos campos para ver si una actualización fue exitosa o no.

+1

Eso no es lo que quería decir. El código anterior actualizará alegremente la base de datos independientemente de lo que coloque en la matriz $ values, independientemente de si la clave existe o no (si no lo hace, simplemente agregue el valor/par de claves al documento). Volviendo a leer la documentación de php.net encontré la opción "segura" y la agregué al código anterior, por lo que ahora se ve así: $ collection-> update ($ query, array ('$ set' = > $ values), array ("safe" => true)); Pero sigo obteniendo los mismos resultados (NULO, cierto, 1, 1) cada vez que realizo intencionadamente una actualización de basura. – zmg

3

¿Cómo se sabe qué filas se ven afectadas con una actualización de MongoDB?

Al igual que con todas las operaciones de escritura, getLastError mando en MongoDB puede confirmar el resultado de la operación de escritura de la actualización, se describe aquí:

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

El comando getLastError devuelve el estado de error de la última operación en el conexión actual. De forma predeterminada, MongoDB no proporciona una respuesta para confirmar el éxito o el fracaso de una operación de escritura, los clientes generalmente usan getLastError en combinación con operaciones de escritura para garantizar que la escritura tenga éxito.

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

Cuestiones relacionadas