MongoCollection
PHP Manual

MongoCollection::insert

(PECL mongo >=0.9.0)

MongoCollection::insertInserta un documento en la colección

Descripción

public bool|array MongoCollection::insert ( array|object $a [, array $options = array() ] )

Todas las cadenas de texto que se envíen a la base de datos deben estar en UTF-8. Si un string no estuviera en UTF-8, se lanzaría una excepción MongoException. Para insertar (o para consultar) un texto que no sea UTF-8, utilice MongoBinData.

Parámetros

a

Un array u objeto. Si se utiliza un objeto, este no puede tener propiedades protegidas o privadas.

Nota:

Si el parámetro no posee una clave _id o propiedad, se creará una nueva instancia de MongoId y se le asignará. Este comportamiento especial no implica que el parámetro sea pasado por referencia.

options

Opciones para la inserción.

  • "fsync"

    Booleano, su valor predeterminado es FALSE. Si la opción "journal" está habilitada, funciona exactamente como "j". Si no está habilitada, fuerza a la inserción que sea sincronizada con el disco antes de devolver que tuvo éxito. Si es TRUE, está implicada una inserción reconocida y sobrescribirá el ajuste w a 0.

    Nota:

    Esta opción está obsoleta. Use la opción "j" en su lugar.

  • "j"

    Booleano, su valor predeterminado es FALSE. Fuerza a la inserción a ser sincronizada con el diario antes de devolver que ha tenido éxito. Si es TRUE, implica una inserción reconocida y sobrescribirá el ajuste w a 0.

  • "w"

    Véase WriteConcerns. El valor predeterminado de MongoClient es 1.

  • "wtimeout"

    Cuánto esperar para el reconocimiento de WriteConcern. El valor predeterminado de MongoClient es 10000 milisegundos.

  • "safe"

    Obsoleto. Use la opción w de WriteConcern.

  • "timeout"

    Entero, valor predeterminado MongoCursor::$timeout. Si se usan las escrituras reconocidas, esto estable cuánto debe esperar el cliente (en milisegundos) a una respuesta de la base de datos. Si la base de datos no responde dentro de perído de espera, se lanzará una MongoCursorTimeoutException.

Valores devueltos

Devuelve un array que contiene el estado de la inserción si la opción "w" está establecida. De lo contrario, devuelve TRUE si el array insertado no está vacío (se lanzará una MongoException si el array insertado está vacío).

Si se devuelve un array, las siguientes claves podrían estar presentes:

ok

Debería ser casi siempre 1 (a menos que last_error falle por sí mismo).

err

Si este campo es diferente de null, un error ocurrido en la operación anterior. Si este campo está establecido, será una cadena describiendo el error que ocurrió.

code

Si ocurrión un error de base de datos, el código de error relevante será devuelto al cliente.

errmsg

Este campo está establecido si algo va mal con un comando de base de datos. Está asociado con ok igual a 0. Por ejemplo, si se establece w y se agota el tiempo, errmsg será establecido a "timed out waiting for slaves" y ok será 0. Si este campo es establecido, será una cadena describiendo el error ocurrido.

n

Si la última operación fue de inserción, una upsert, o una eliminación, será devuelto el número de objetos afectados. Para operaciones de inserción, este valor siempre es 0.

wtimeout

Si la opción anterior agota el tiempo, espera una réplica.

waited

Cuánto esperará la operación antes de agotarse el tiempo.

wtime

Si w fue establecido y la operación tiene éxito, cuánto toma la réplica a los servidores w.

upserted

Si ocurre un upsert, este campo contendrá el nuevo campo _id del registro. Para upserts, estará presente este campo o updatedExisting (a menos que ocurra un error).

updatedExisting

Si un upsert actualiza un elemento existente, este campo será "true". Para upserts, estará presente este campo o upserted (a menos que ocurra un error).

Errores/Excepciones

Lanza una excepción de tipo MongoException si el documento insertado está vacío o si contiene claves de longitud cero. Intentar insertar un objeto con propiedades protegidas o privadas causará un error de clave de longitud cero.

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 acepta un booleano para indicar una escritura aceptada. En su lugar, ahora esto tiene que hacerse con array('w' => 1) (El comportamiento predeterminado de MongoClient).
1.2.0 Se añadió el parámetro "timeout".
1.0.11 Se desconecta en errores "not master" si "safe" está establecido.
1.0.9

Añadida la capacidad de pasar enteros a la opción "safe", la cual anteriormente únicamente aceptaba booleanos.

Añadida la opción "fsync".

Cambiado el tipo devuelto por un array que contiene información si se utiliza la opción "safe". De otro modo, se devuelve un 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".
1.0.1 Lanza una MongoCursorException si la opción "safe" está establecida y la inserción falla.

Ejemplos

Ejemplo #1 Ejemplo de MongoCollection::insert() con _id

Un campo _id será añadido al documento insertado si no estuviera ya presente. Dependiendo de cómo el parámetro sea pasado, estará disponible o no un _id generado para llamar al código.

<?php

$m 
= new MongoClient();
$colección $m->selectCollection('test''phpmanual');

// Si se usa un array literal, no hay forma de acceder al _id generado
$colección->insert(array('x' => 1));

// El _id está disponible en un array pasado por valor
$a = array('x' => 2);
$colección->insert($a);
var_dump($a);

// El _id no está disponible en un array pasado por referencia
$b = array('x' => 3);
$ref = &$b;
$colección->insert($ref);
var_dump($ref);

// El _id está disponible si una función envolvente no desencadena una copia durante la escritura
function insert_no_cow($colección$documento)
{
    
$colección->insert($documento);
}

$c = array('x' => 4);
insert_no_cow($colección$c);
var_dump($c);

// El _id no está disponible si una función envolvente desencadena una copia durante la escritura
function insert_cow($colección$documento)
{
    
$documento['y'] = 1;
    
$colección->insert($documento);
}

$d = array('x' => 5);
insert_cow($colección$d);
var_dump($d);

?>

El resultado del ejemplo sería algo similar a:

array(2) {
  ["x"]=>
  int(2)
  ["_id"]=>
  object(MongoId)#4 (0) {
  }
}
array(1) {
  ["x"]=>
  int(3)
}
array(2) {
  ["x"]=>
  int(4)
  ["_id"]=>
  object(MongoId)#5 (0) {
  }
}
array(1) {
  ["x"]=>
  int(5)
}

Ejemplo #2 Ejemplo de escritura aceptada con MongoCollection::insert()

Este ejemplo muestra cómo al insertar dos elementos con el mismo _id, se provoca que se lance una excepción MongoCursorException, ya que w está habilitado.

<?php

$persona 
= array("nombre" => "Joe""edad" => 20);
$colección->insert($persona);

// ahora $persona tiene un campo _id, así que si intentamos guardarlo
// de nuevo, obtendremos una excepción
try {
    
$collection->insert($persona, array("w" => 1));
} catch(
MongoCursorException $e) {
    echo 
"No se puede guardar dos veces la misma persona!\n";
}

?>

Ver también


MongoCollection
PHP Manual