Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Insertar un documento

En esta guía, puedes aprender cómo insertar documentos en una colección de MongoDB.

Antes de que puedas encontrar, actualizar y borrar documentos en MongoDB, debes insertar esos documentos. Puedes insertar un documento utilizando el InsertOne() método, o inserte varios documentos utilizando el método InsertMany() o BulkWrite().

Las siguientes secciones se centran en InsertOne() y InsertMany(). Para aprender a usar el método BulkWrite(), consulte el Guía sobre operaciones en bloque.

En MongoDB, cada documento debe contener un campo _id único.

Las dos opciones para gestionar este campo son:

  • Gestionar este campo por tu cuenta, asegurándote de que cada valor que utilices sea único.

  • Permitir que el controlador genere automáticamente valores únicos de ObjectId. El controlador genera valores únicos de ObjectId para documentos para los que no se especifica explícitamente un _id.

A menos que proporciones sólidas garantías de unicidad, MongoDB te recomienda dejar que el controlador genere automáticamente valores _id.

Nota

Los valores duplicados de _id violan las restricciones de índice único, lo que hace que el controlador devuelva un WriteError.

Para obtener más información sobre el campo _id, consulta la entrada manual del servidor en Unique Indexes.

Para aprender más sobre la estructura y las reglas de los documentos, consultar la entrada del Manual del Servidor sobre Documentos.

Utilice el método InsertOne() para insertar un solo documento en una colección.

Después de una inserción exitosa, el método devuelve una instancia InsertOneResult que contiene el _id del nuevo documento.

Este ejemplo utiliza la siguiente Book estructura como modelo para los documentos de la colección books:

type Book struct {
Title string
Author string
}

El siguiente ejemplo crea e inserta un documento en la colección books utilizando el método InsertOne():

coll := client.Database("db").Collection("books")
doc := Book{Title: "Atonement", Author: "Ian McEwan"}
result, err := coll.InsertOne(context.TODO(), doc)
fmt.Printf("Inserted document with _id: %v\n", result.InsertedID)
Inserted document with _id: ObjectID("...")

Puedes modificar el comportamiento de InsertOne() creando y pasando una estructura opcional InsertOneOptions. Las opciones disponibles para configurar con InsertOneOptions son:

Opción
Descripción

BypassDocumentValidation

If true, allows the write to opt-out of document level validation.
Default: false

Construya un InsertOneOptions de la siguiente manera:

opts := options.InsertOne().SetBypassDocumentValidation(true)

Utiliza el método InsertMany() para insertar varios documentos en una colección.

Después de una inserción exitosa, el método InsertMany() devuelve una instancia de InsertManyResult que contiene los campos _id de los documentos insertados.

El siguiente ejemplo crea e inserta varios documentos en la books colección utilizando el método InsertMany():

coll := client.Database("myDB").Collection("favorite_books")
docs := []interface{}{
Book{Title: "Cat's Cradle", Author: "Kurt Vonnegut Jr."},
Book{Title: "In Memory of Memory", Author: "Maria Stepanova"},
Book{Title: "Pride and Prejudice", Author: "Jane Austen"},
}
result, err := coll.InsertMany(context.TODO(), docs)
fmt.Printf("Documents inserted: %v\n", len(result.InsertedIDs))
for _, id := range result.InsertedIDs {
fmt.Printf("Inserted document with _id: %v\n", id)
}

Después de ejecutar el código anterior, tu salida se asemeja a lo siguiente:

Documents inserted: 3
Inserted document with _id: ObjectID("...")
Inserted document with _id: ObjectID("...")
Inserted document with _id: ObjectID("...")

Puedes modificar el comportamiento de InsertMany() creando y pasando una estructura opcional InsertManyOptions. Las opciones disponibles para configurar con InsertManyOptions son:

Opción
Descripción

BypassDocumentValidation

If true, allows the write to opt-out of document level validation.
Default: false

Ordered

If true, the driver sends documents to the server in the order provided. If an error occurs, the driver and server end all remaining insert operations. To learn more, see Ordered Behavior.
Default: false

Construya un InsertManyOptions de la siguiente manera:

opts := options.InsertMany().SetBypassDocumentValidation(true).SetOrdered(false)

Suponga que desea insertar los siguientes documentos:

{ "_id": 1, "title": "Where the Wild Things Are" }
{ "_id": 2, "title": "The Very Hungry Caterpillar" }
{ "_id": 1, "title": "Blueberries for Sal" }
{ "_id": 3, "title": "Goodnight Moon" }

Si intentas insertar estos documentos con el InsertManyOptions predeterminado, se produce un BulkWriteException en el tercer documento debido al valor repetido de _id, pero los documentos que preceden al que genera el error aún se insertan en la colección.

Nota

Puedes obtener un reconocimiento de la inserción exitosa de un documento incluso si ocurre una BulkWriteException:

type Book struct {
ID int `bson:"_id"`
Title string
}
...
docs := []interface{}{
Book{ID: 1, Title: "Where the Wild Things Are"},
Book{ID: 2, Title: "The Very Hungry Caterpillar"},
Book{ID: 1, Title: "Blueberries for Sal"},
Book{ID: 3, Title: "Goodnight Moon"},
}
result, err := coll.InsertMany(context.TODO(), docs)
if err != nil {
fmt.Printf("A bulk write error occurred, but %v documents were still inserted.\n", len(result.InsertedIDs))
}
for _, id := range result.InsertedIDs {
fmt.Printf("Inserted document with _id: %v\n", id)
}
A bulk write error occurred, but 2 documents were still inserted.
Inserted document with _id: 1
Inserted document with _id: 2

Después de ejecutar el código anterior, tu colección contiene los siguientes documentos:

{ "_id": 1, "title": "Where the Wild Things Are" }
{ "_id": 2, "title": "The Very Hungry Caterpillar" }

Para ejemplos ejecutables de las operaciones de inserción, consulte los siguientes ejemplos de uso:

Para obtener más información sobre cómo realizar las operaciones mencionadas, consulte las siguientes guías:

Para obtener más información sobre cualquiera de los métodos o tipos discutidos en esta guía, consultar la siguiente documentación de la API:

Volver

Guardar

En esta página