If you try to remove a document that doesn't exist, remove() won't throw an exception.
Even if 'w' is set to 1, remove() will return an array similar to this:
Array ( [n] => 0 [connectionId] => 10726 [err] => [ok] => 1 )
So, in order to see if a remove() was really successful, you need to look at [n] key. If it's 0, that means the remove() did not remove any documents.
If remove() is successful, [n] will be > 0.
MongoCollection::remove
(PECL mongo >=0.9.0)
MongoCollection::remove — Eliminar registros de esta colección
Descripción
$criteria = array()
[, array $options = array()
]] )Parámetros
-
criteria -
Descripción de los registros que se eliminarán.
-
options -
Opciones de eliminación.
"w"
Véase WriteConcerns. El valor predeterminado de MongoClient es 1.
-
"justOne"
Eliminar solamente uno de los registros que cumplan las condiciones.
"fsync"
Booleano, su valor predeterminado es
FALSE. Fuerza a la inserción a estar sincronizada con el disco antes de devolver éxito. Si esTRUE, está implicada una inserción declarada y sobrescribirá el ajuste w a 0."timeout"
Entero, su valor predeterminado es MongoCursor::$timeout. Si se establece a "safe", establece cuánto espera el cliente (en milisegundos) a un respuesta de la base de datos. Si la base de datos no responde dentro del periodo del tiempo de espera, será lanzada una MongoCursorTimeoutException.
"safe"
Obsoleto. Use la opción w de WriteConcern.
Valores devueltos
Devuelve un array que contiene el estado de la eliminación si está
establecida la opción "w". De lo contrario, devuelve TRUE.
Los campos del array de estado están descritros en la documentación de MongoCollection::insert().
Errores/Excepciones
Lanza una MongoCursorException si la opción "w" está establecida y la escritura falla.
Lanza una MongoCursorTimeoutException si la opción "w" está establecida a un valor mayor que uno y la operación toma más de MongoCursor::$timeout milisegundos en completarse. Esto no pondrá fin a la operación en el servidor, es un tiempo de espera del lado del cliente. La operación en MongoCollection::$wtimeout es milisegundos.
Historial de cambios
| Versión | Descripción |
|---|---|
| 1.3.0 |
El parámetro options ya no solo acepta un booleano
que indique "soloUno" "justOne". En su lugar, ahora se debe hacer
con array('justOne' => true).
|
| 1.2.11 |
Emite un error de nivel E_DEPRECATED cuando
options es de tipo scalar.
|
| 1.2.0 | Se añadió la opción "timeout". |
| 1.0.11 | Se desconcecta cuando ocurren errores "not master" si "safe" está establecido. |
| 1.0.9 |
Se añadió la capacidad de pasar números enteros a la opción "safe", la cual anteriomente sólo aceptaba valores booleanos. Se añadío la opción "fsync". Es tipo devuelto se cambio para que fuera un array que contuviera la información del error si se usaba la opción "safe". De otro modo, se devolvía un valor booleano como antes. |
| 1.0.5 | Cambiado el segundo parámetro a un array de opciones. Antes de 1.0.5, el segundo parámetro era un booleano indicando la opción "safe". |
Ejemplos
Ejemplo #1 Ejemplo de MongoCollection::remove() con justOne
<?php
$radioactivo = $db->radioactivo;
// contar cuánto plution queda
$restante = $radioactivo->count(array('type' => 94));
$vidamedia = $restante/2;
// eliminar la mitad
while ($vidamedia > 0) {
$radioactivo->remove(array('type' => 94), array("justOne" => true));
$vidamedia--;
}
?>
Ver también
- MongoCollection::insert() - Inserta un documento en la colección
- MongoCollection::update() - Actualizar registros basándose en los criterios proporcionados
- Documentación de MongoDB sobre » remove.
To remove a document based on its ID, you need to ensure that you pass the ID as a MongoID object rather than just a string:
<?php
$id = '4b3f272c8ead0eb19d000000';
// will not work:
$collection->remove(array('_id' => $id), true);
// will work:
$collection->remove(array('_id' => new MongoId($id)), true);
?>
