Importante
Método obsoleto de mongosh
Este método está obsoleto en mongosh. Para métodos alternativos, consulta Cambios de compatibilidad con el mongo Shell heredado.
Definición
db.collection.insert()Inserta uno o varios documentos en una colección.
Devuelve: Un objeto WriteResult para inserciones individuales.
Un objeto BulkWriteResult para inserciones en bloque.
Sintaxis
db.collection.insert() tiene la siguiente sintaxis:
db.collection.insert( <document or array of documents>, { writeConcern: <document>, ordered: <boolean> } )
Parámetros
Parameter | Tipo | Descripción |
|---|---|---|
| documento o arreglo | Un documento o un arreglo de documentos para insertar en la colección. |
| Documento | opcional. Un documento que expresa el nivel de confirmación de escritura (write concern). Omitir para utilizar el nivel de confirmación de escritura (write concern) por defecto. See nivel de confirmación de escritura (write concern). No establezcas explícitamente el nivel de confirmación de escritura para la operación si se ejecuta en una transacción. Para usar el nivel de confirmación de escritura con transacciones, consulta Transacciones y nivel de confirmación de escritura. |
| booleano | Opcional. Si Si Se establece por defecto en |
Comportamientos
Nivel de confirmación de escritura
El método insert() utiliza el comando insert, que utiliza la nivel de confirmación de escritura (write concern) predeterminada. Para especificar un nivel de confirmación de escritura (write concern) diferente, incluya el nivel de confirmación de escritura (write concern) en el parámetro de opciones.
Creación de colección y campo _id
Si la colección no existe, insert() crea la colección.
Si el documento a insertar no especifica un campo _id, entonces mongod agrega el campo _id y asigna un ObjectId() único para el documento. La mayoría de los controladores crean un ObjectId e insertan el campo _id, pero el mongod lo creará y completará el _id si el controlador o la aplicación no lo hacen.
Si el documento contiene un campo _id, el valor de _id debe ser único dentro de la colección para evitar un error de clave duplicada.
Transacciones
insert() puede usarse dentro de transacciones distribuidas.
Importante
En la mayoría de los casos, una transacción distribuida incurre en un costo de rendimiento mayor que las escrituras de documentos individuales, y la disponibilidad de transacciones distribuidas no debería ser un sustituto para un diseño de esquema efectivo. Para muchos casos, el modelo de datos desnormalizado (documento incrustado y matrices) seguirá siendo óptimo para tus datos y casos de uso. Es decir, en muchos casos, modelar tus datos de forma adecuada minimizará la necesidad de transacciones distribuidas.
Para consideraciones adicionales sobre el uso de transacciones (como el límite de tiempo de ejecución y el límite de tamaño del oplog), consulta también las consideraciones de producción.
Creación de colecciones en transacciones
Puedes crear colecciones e índices dentro de una transacción distribuida si la transacción no es una transacción de escritura entre particiones.
Si especifica una inserción en una colección inexistente en una transacción, MongoDB crea la colección de forma implícita.
Nivel de confirmación de escritura y transacciones
No establezcas explícitamente el nivel de confirmación de escritura para la operación si se ejecuta en una transacción. Para usar el nivel de confirmación de escritura con transacciones, consulta Transacciones y nivel de confirmación de escritura.
Entradas de OpLog
Si una operación de insert() inserta correctamente un documento, la operación agrega una entrada en el oplog (registro de operaciones). Si la operación falla, la operación no agrega una entrada en el registro opcional (oplog).
Ejemplos
Los ejemplos de esta página utilizan datos del conjunto de datos de muestra sample_mflix. Para obtener más información sobre cómo cargar este conjunto de datos en la implementación autogestionada de MongoDB, consultar Cargar el conjunto de datos de muestra. Si se realizó alguna modificación en las bases de datos de muestra, es posible que se deban descartar y volver a crear las bases de datos para ejecutar los ejemplos de esta página.
Insertar un documento sin especificar un campo _id
El siguiente ejemplo inserta un documento sin un campo _id en la colección movies:
db.movies.insert( { title: "Inception", year: 2010, genres: [ "Action", "Sci-Fi" ] } )
{ acknowledged: true, insertedIds: { '0': "..." } }
Debido a que el documento insertado no _id incluye, crea y agregamongod el _id campo y le asigna un valor ObjectId() único.
Los valores de ObjectId son específicos de la máquina y del momento en que se ejecuta la operación. Por lo tanto, tus valores pueden diferir de los del ejemplo.
Insertar un documento que especifique un campo _id
El siguiente ejemplo especifica el campo _id del documento insertado en la colección movies. El valor de _id debe ser único dentro de la colección para evitar un error de clave duplicada.
db.movies.insert( { _id: 10, title: "Inception", year: 2010 } )
{ acknowledged: true, insertedIds: { '0': 10 } }
Inserta varios documentos
El siguiente ejemplo realiza una inserción masiva pasando un array de documentos insert() a. Por defecto, MongoDB realiza una inserción ordenada. Con las inserciones ordenadas, si se produce un error durante la inserción de uno de los documentos, MongoDB devuelve un error sin procesar los documentos restantes del array.
El primer documento especifica un _id campo. Dado que el segundo y el tercer documento no contienen un _id campo, crea y agregamongod el _id campo para esos documentos durante la inserción:
db.movies.insert( [ { _id: 11, title: "Inception", year: 2010, genres: [ "Action", "Sci-Fi" ] }, { title: "The Matrix", year: 1999 }, { title: "Interstellar", year: 2014 } ] )
{ acknowledged: true, insertedIds: { '0': 11, '1': "...", '2': "..." } }
Realizar una inserción no ordenada
El siguiente ejemplo realiza una inserción no ordenada de tres documentos. Con las inserciones desordenadas, si se produce un error durante la inserción de uno de los documentos, MongoDB continúa insertando los documentos restantes en el arreglo.
db.movies.insert( [ { _id: 20, title: "2001: A Space Odyssey", year: 1968 }, { _id: 21, title: "A Clockwork Orange", year: 1971 }, { _id: 22, title: "The Shining", year: 1980 } ], { ordered: false } )
Anular el nivel de confirmación de escritura (write concern) por defecto
La siguiente operación a un set de réplicas especifica un nivel de confirmación de escritura (write concern) de w: 2 con un wtimeout de 5000 milisegundos. Esta operación regresa después de que el guardado se propaga tanto al primario como a un secundario, o expira después de 5 segundos.
db.movies.insert( { title: "The Revenant", year: 2015 }, { writeConcern: { w: 2, j: true, wtimeout: 5000 } } )
WriteResult
Cuando se le pasa un documento, insert() devuelve un objeto WriteResult().
Resultados exitosos
Con éxito, el objeto WriteResult devuelto contiene información sobre el número de documentos insertados:
WriteResult({ "nInserted" : 1 })
Errores de nivel de confirmación de escritura
Si insert() encuentra errores de nivel de confirmación de escritura (write concern), los resultados incluyen el campo WriteResult.writeConcernError:
WriteResult({ "nInserted" : 1, "writeConcernError"({ "code" : 64, "errmsg" : "waiting for replication timed out", "errInfo" : { "wtimeout" : true, "writeConcern" : { "w" : "majority", "wtimeout" : 100, "provenance" : "getLastErrorDefaults" } } })
Errores no relacionados con el nivel de confirmación de escritura (write concern)
Si insert() encuentra un error de nivel de confirmación de escritura (write concern), los resultados incluyen el campo WriteResult.writeError:
WriteResult({ "nInserted" : 0, "writeError" : { "code" : 11000, "errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.foo.$_id_ dup key: { : 1.0 }" } })
BulkWriteResult
Cuando se le pasa un arreglo de documentos, insert() devuelve un objeto BulkWriteResult().