ANNOUNCEMENTVoyage AI joins MongoDB to power more accurate and trustworthy AI applications on Atlas. Learn more >
NEWSLearn why MongoDB was named a leader in the 2024 Gartner® Magic Quadrant™ Read the report >
NEWMongoDB 8.0: Experience unmatched speed and performance. Check it out >

Operaciones CRUD de MongoDB

Índice


Definición básica de la operación CRUD

La mayoría de las interacciones transaccionales que un usuario tiene con una plataforma digital, como un sitio web o aplicación web, incluyen solicitudes de cuatro operaciones básicas:

  • Crear algo nuevo (por ejemplo, un perfil de cliente).
  • Leer (como obtener los detalles del pedido de un usuario).
  • Actualizar información (como el número de teléfono móvil o la dirección de correo electrónico de un usuario).
  • Eliminar (por instancia, un número de teléfono del trabajo).

CRUD está orientado a datos y está estandarizado de acuerdo con los verbos de acción HTTP. El front end de una aplicación captura la información y la envía como una solicitud HTTP al middleware, que llama a las funciones de base de datos adecuadas para completar la tarea. Estas cuatro funciones básicas se denominan colectivamente CRUD, el acrónimo de create, read, update y delete.

HTTP y operaciones CRUD de base de datos correspondientes

Ejemplos de operaciones básicas

Los métodos CRUD son las principales formas en las que gestionará los datos de sus bases de datos. Ya sea que se trate de una operación masiva o individual, las operaciones CRUD son esenciales para cada aplicación.

Algunos ejemplos de una operación de creación son crear un nuevo perfil de usuario en la base de datos, crear un carrito de compras para el usuario y crear un nuevo catálogo de libros (inserción masiva).

Algunos ejemplos de operaciones de lectura son buscar detalles del producto para un criterio de búsqueda determinado por parte del usuario, como cuando un usuario busca un teléfono móvil de la marca “Apple”, mostrar todos los modelos del iPhone y la información del carrito de productos del usuario, y ver los detalles de los empleados en el portal.

Los ejemplos de operaciones de actualización incluyen la actualización de la información personal del usuario, la información del carrito, la dirección de facturación, la marca de tiempo o el número de serie de una gama determinada de productos (actualización masiva).

Algunos ejemplos de operaciones de eliminación son eliminar productos del carrito de un usuario, eliminar un libro de los favoritos y eliminar todos los registros que superen un período determinado (eliminación masiva).

Analicemos más a fondo la definición de CRUD y examinemos cómo ejecutar las operaciones CRUD de MongoDB con el lenguaje de consulta de MongoDB (MQL).

¿Qué es CRUD en MongoDB?

Las operaciones CRUD describen las convenciones de una interfaz de usuario que permiten a los usuarios ver, buscar y modificar partes de la base de datos. MongoDB proporciona una forma elegante de realizar operaciones CRUD con el lenguaje de programación de su elección a través de sus controladores.

Los documentos de MongoDB se modifican conectándose a un servidor, consultando los documentos adecuados y, a continuación, cambiando las propiedades de configuración antes de devolver los datos a la base de datos para actualizarlos.

Cuando se trata de operaciones CRUD individuales:

  • La operación create se utiliza para insertar nuevos documentos en la base de datos MongoDB .
  • La operación read se utiliza para consultar un documento en la base de datos.
  • La operación update se utiliza para modificar documentos existentes en la base de datos.
  • La operación delete se utiliza para eliminar documentos de la base de datos.

Cómo realizar operaciones CRUD

Ahora que hemos definido las operaciones CRUD de MongoDB , podemos ver cómo llevar a cabo las operaciones individuales y manipular documentos en una base de datos MongoDB. Entremos en los procesos de creación, lectura, actualización y eliminación de documentos, mirando cada operación por turno.

Métodos de MongoDB para operaciones CRUD

Crear operación

Para MongoDB CRUD, si la colección especificada no existe, la operación create creará la colección cuando se ejecute. Las operaciones Create en MongoDB tienen como objetivo una sola colección, no varias colecciones. Las operaciones Insert en MongoDB son atomic en un solo document nivel.

MongoDB ofrece dos operaciones de creación diferentes que puede utilizar para insertar documentos en una colección:

insertOne()

Como su nombre indica, insertOne() le permite insertar un documento en la colección. Para este ejemplo, vamos a trabajar con una colección llamada RecordsDB. Podemos insertar una sola entrada en nuestra colección llamando al método insertOne() en RecordsDB. Luego proporcionamos la información que queremos insertar en forma de pares clave-valor, estableciendo el esquema.

 db.RecordsDB.insertOne({
    name: "Marsh",
    age: "6 years",
    species: "Dog",
    ownerAddress: "380 W. Fir Ave",
    chipped: true
})

Si la operación de creación es exitosa, se crea un nuevo documento. La función devolverá un objeto donde “reconocido” es “verdadero” e “insertID” es el “ObjectId” recién creado.

 > db.RecordsDB.insertOne({
... name: "Marsh",
... age: "6 years",
... species: "Dog",
... ownerAddress: "380 W. Fir Ave",
... chipped: true
... })
{
        "acknowledged" : true,
        "insertedId" : ObjectId("5fd989674e6b9ceb8665c57d")
}

insertMany()

Es posible insertar varios elementos a la vez llamando al método insertMany() en la colección deseada. En este caso, pasamos varios elementos a nuestra colección elegida (RecordsDB) y los separamos por comas. Dentro de los paréntesis, utilizamos corchetes para indicar que estamos pasando por una lista de entradas múltiples. Esto se conoce comúnmente como método anidado.

db.RecordsDB.insertMany([{
    name: "Marsh",
    age: "6 years",
    species: "Dog",
    ownerAddress: "380 W. Fir Ave",
    chipped: true},
      {name: "Kitana", 
      age: "4 years", 
      species: "Cat", 
      ownerAddress: "521 E. Cortland", 
      chipped: true}])

db.RecordsDB.insertMany([{ name: "Marsh", age: "6 years", species: "Dog", 
ownerAddress: "380 W. Fir Ave", chipped: true}, {name: "Kitana", age: "4 years", 
species: "Cat", ownerAddress: "521 E. Cortland", chipped: true}])
{
        "acknowledged" : true,
        "insertedIds" : [
                ObjectId("5fd98ea9ce6e8850d88270b4"),
                ObjectId("5fd98ea9ce6e8850d88270b5")
        ]
}

Operaciones de lectura

Las operaciones read le permiten suministrar filtros y criterios de consulta especiales para especificar qué documentos desea. La documentación de MongoDB contiene más información sobre los filtros de consulta disponibles . Los modificadores de consulta también pueden utilizarse para cambiar el número de resultados devueltos.

MongoDB dispone de dos métodos para leer documentos de una colección:


find()

Para obtener todos los documentos de una colección, podemos utilizar simplemente el método find() en la colección que hayamos elegido. Ejecutar solo el método find() sin argumentos devolverá todos los registros que haya actualmente en la colección.

db.RecordsDB.find()
{ "_id" : ObjectId("5fd98ea9ce6e8850d88270b5"), "name" : "Kitana", "age" : "4 years", "species" : "Cat", "ownerAddress" : "521 E. Cortland", "chipped" : true }
{ "_id" : ObjectId("5fd993a2ce6e8850d88270b7"), "name" : "Marsh", "age" : "6 years", "species" : "Dog", "ownerAddress" : "380 W. Fir Ave", "chipped" : true }
{ "_id" : ObjectId("5fd993f3ce6e8850d88270b8"), "name" : "Loo", "age" : "3 years", "species" : "Dog", "ownerAddress" : "380 W. Fir Ave", "chipped" : true }
{ "_id" : ObjectId("5fd994efce6e8850d88270ba"), "name" : "Kevin", "age" : "8 years", "species" : "Dog", "ownerAddress" : "900 W. Wood Way", "chipped" : true }

En el resultado, podemos ver todos los registros presentes en la colección. Tenga en cuenta que cada registro tiene asignado un “ObjectId“ a la clave “_id“.

Si desea ser más específico con una operación de lectura y encontrar una subsección deseada de los registros, puede utilizar los criterios de filtrado mencionados anteriormente para elegir qué resultados deben devolverse. Una de las formas más habituales de filtrar los resultados es buscar por valor.

db.RecordsDB.find({"species":"Cat"})
{ "_id" : ObjectId("5fd98ea9ce6e8850d88270b5"), "name" : "Kitana", "age" : "4 years", "species" : "Cat", "ownerAddress" : "521 E. Cortland", "chipped" : true }

findOne()

Para obtener un documento que satisfaga los criterios de búsqueda, podemos utilizar simplemente el método findOne() en nuestra colección elegida. Si varios documentos satisfacen la consulta, este método devuelve el primer documento según el orden natural que refleja el orden de los documentos en el disco. Si ningún documento satisface los criterios de búsqueda, la función devuelve null. La función adopta la siguiente forma de sintaxis.

db.{collection}.findOne({query}, {projection})

Tomemos como ejemplo la siguiente colección, RecordsDB.

{ "_id" : ObjectId("5fd98ea9ce6e8850d88270b5"), "name" : "Kitana", "age" : "8 years", "species" : "Cat", "ownerAddress" : "521 E. Cortland", "chipped" : true }
{ "_id" : ObjectId("5fd993a2ce6e8850d88270b7"), "name" : "Marsh", "age" : "6 years", "species" : "Dog", "ownerAddress" : "380 W. Fir Ave", "chipped" : true }
{ "_id" : ObjectId("5fd993f3ce6e8850d88270b8"), "name" : "Loo", "age" : "3 years", "species" : "Dog", "ownerAddress" : "380 W. Fir Ave", "chipped" : true }
{ "_id" : ObjectId("5fd994efce6e8850d88270ba"), "name" : "Kevin", "age" : "8 years", "species" : "Dog", "ownerAddress" : "900 W. Wood Way", "chipped" : true }

Y ejecutamos la siguiente línea de código:

db.RecordsDB.find({"age":"8 years"})

Obtendríamos el siguiente resultado:

{ "_id" : ObjectId("5fd98ea9ce6e8850d88270b5"), "name" : "Kitana", "age" : "8 years", "species" : "Cat", "ownerAddress" : "521 E. Cortland", "chipped" : true }

Observe que aunque dos documentos cumplen con los criterios de búsqueda, solo se devuelve el primer documento que coincide con la condición de búsqueda.

Operaciones de actualización

Al igual que las operaciones de creación, las operaciones de actualización operan en una sola colección y son atómicas en un solo nivel de documento. Una operación de actualización toma filtros y criterios para seleccionar los documentos que desea actualizar.

Debe tener cuidado al actualizar documentos, ya que las actualizaciones son permanentes y no se pueden revertir. Esto también se aplica a las operaciones de eliminación.

Para MongoDB CRUD, hay tres métodos diferentes para actualizar documentos:


updateOne()

Podemos actualizar un registro actualmente existente y cambiar un solo documento con una operación de actualización. Para hacer esto, usamos el método updateOne() en una collection elegida, que aquí es “RecordsDB”. Para actualizar un documento, proporcionamos al método dos argumentos: un filtro de actualización y una acción de actualización.

El filtro de actualización define qué elementos queremos actualizar y la acción de actualización define cómo actualizar esos elementos. Primero pasamos el filtro de actualización. Luego, usamos la tecla “$set” y proporcionamos los campos que queremos actualizar como valor. Este método actualizará el primer registro que coincida con el filtro proporcionado.

 db.RecordsDB.updateOne({name: "Marsh"}, {$set:{ownerAddress: "451 W. Coffee St. A204"}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
{ "_id" : ObjectId("5fd993a2ce6e8850d88270b7"), "name" : "Marsh", "age" : "6 years", "species" : "Dog", "ownerAddress" : "451 W. Coffee St. A204", "chipped" : true }

updateMany()

updateMany() nos permite actualizar varios elementos pasando por una lista de elementos, tal como lo hicimos al insertar varios elementos. Esta operación de actualización utiliza la misma sintaxis para actualizar un solo documento.

 db.RecordsDB.updateMany({species:"Dog"}, {$set: {age: "5"}})
{ "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 }
> db.RecordsDB.find()
{ "_id" : ObjectId("5fd98ea9ce6e8850d88270b5"), "name" : "Kitana", "age" : "4 years", "species" : "Cat", "ownerAddress" : "521 E. Cortland", "chipped" : true }
{ "_id" : ObjectId("5fd993a2ce6e8850d88270b7"), "name" : "Marsh", "age" : "5", "species" : "Dog", "ownerAddress" : "451 W. Coffee St. A204", "chipped" : true }
{ "_id" : ObjectId("5fd993f3ce6e8850d88270b8"), "name" : "Loo", "age" : "5", "species" : "Dog", "ownerAddress" : "380 W. Fir Ave", "chipped" : true }
{ "_id" : ObjectId("5fd994efce6e8850d88270ba"), "name" : "Kevin", "age" : "5", "species" : "Dog", "ownerAddress" : "900 W. Wood Way", "chipped" : true }

replaceOne() El método replaceOne() reemplaza un solo documento en la colección especificada. replaceOne()_ reemplaza todo el documento, lo que significa que los campos del documento anterior no contenidos en el nuevo se perderán.

 db.RecordsDB.replaceOne({name: "Kevin"}, {name: "Maki"})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
 > db.RecordsDB.find()
{ "_id" : ObjectId("5fd98ea9ce6e8850d88270b5"), "name" : "Kitana", "age" : "4 years", "species" : "Cat", "ownerAddress" : "521 E. Cortland", "chipped" : true }
{ "_id" : ObjectId("5fd993a2ce6e8850d88270b7"), "name" : "Marsh", "age" : "5", "species" : "Dog", "ownerAddress" : "451 W. Coffee St. A204", "chipped" : true }
{ "_id" : ObjectId("5fd993f3ce6e8850d88270b8"), "name" : "Loo", "age" : "5", "species" : "Dog", "ownerAddress" : "380 W. Fir Ave", "chipped" : true }
{ "_id" : ObjectId("5fd994efce6e8850d88270ba"), "name" : "Maki" }

Operaciones de eliminar

Las operaciones de eliminar operan en una sola colección, como las operaciones de actualización y creación. Las operaciones de eliminación también son atómicas para un solo documento. Puede proporcionar operaciones de eliminación con filtros y criterios para especificar qué documentos desea eliminar de una colección. Las opciones de filtro se basan en la misma sintaxis que utilizan las operaciones de lectura.

MongoDB tiene dos métodos diferentes para eliminar registros de una colección:

deleteOne()

deleteOne() elimina un documento de una colección específica en el servidor MongoDB. Se utiliza un criterio de filtro para especificar el elemento que se va a eliminar. Elimina el primer registro que coincide con el filtro proporcionado.

 db.RecordsDB.deleteOne({name:"Maki"})
{ "acknowledged" : true, "deletedCount" : 1 }
 > db.RecordsDB.find()
{ "_id" : ObjectId("5fd98ea9ce6e8850d88270b5"), "name" : "Kitana", "age" : "4 years", "species" : "Cat", "ownerAddress" : "521 E. Cortland", "chipped" : true }
{ "_id" : ObjectId("5fd993a2ce6e8850d88270b7"), "name" : "Marsh", "age" : "5", "species" : "Dog", "ownerAddress" : "451 W. Coffee St. A204", "chipped" : true }
{ "_id" : ObjectId("5fd993f3ce6e8850d88270b8"), "name" : "Loo", "age" : "5", "species" : "Dog", "ownerAddress" : "380 W. Fir Ave", "chipped" : true }

deleteMany()

deleteMany() es un método utilizado para eliminar varios documentos de una colección deseada con una sola operación de eliminación. Se pasa una lista al método y los elementos individuales se definen con criterios de filtro como en deleteOne().

 db.RecordsDB.deleteMany({species:"Dog"})
{ "acknowledged" : true, "deletedCount" : 2 }
 > db.RecordsDB.find()
{ "_id" : ObjectId("5fd98ea9ce6e8850d88270b5"), "name" : "Kitana", "age" : "4 years", "species" : "Cat", "ownerAddress" : "521 E. Cortland", "chipped" : true }

El rendimiento CRUD en bases de datos

NoSQL relacionales frente a no relacionales está mejor optimizado para las operaciones de creación y lectura, y ofrece más escalabilidad. Por lo tanto, son muy adecuados para cargas más altas (que tratar más operaciones CRUD). También son flexibles en términos de almacenamiento de información.

En un experimento detallado realizado por ResearchGate sobre operaciones CRUD con diferentes tipos de bases de datos NoSQL y SQL, se concluyó que las bases de datos NoSQL funcionaron significativamente mejor que las bases de datos SQL en todas las operaciones CRUD, en particular cuando la cantidad de operaciones fue alta. Por ejemplo, MongoDB se destacó en la obtención de datos (operaciones de lectura), con un tiempo medio de rendimiento de 43.5 ms para 100,000 operaciones de lectura (buscar/seleccionar). MongoDB también tiene la ventaja de proporcionar actualizaciones atómicas (actualizaciones a nivel de campo), lo que requiere más tiempo que en cualquier otra base de datos orientada a documentos.

Resumen

Este artículo cubrió información básica sobre CRUD con algunos ejemplos de cómo se realizan las operaciones CRUD en MongoDB. MongoDB Atlas proporciona una forma sencilla de realizar operaciones CRUD utilizando la IU de usuario. Puede consultar el manual de MongoDB para obtener más información sobre los conceptos básicos de MongoDB CRUD para desarrollar aplicaciones escalable y de alto rendimiento.

Preguntas frecuentes

¿Cuáles son los principios de CRUD?

Las siglas CRUD corresponden a las cuatro operaciones básicas que toda aplicación debe poder realizar, es decir, operaciones de creación, lectura, actualización y eliminación. Esto significa que una aplicación debe ser capaz de insertar datos en la base de datos, leer datos de la base de datos, actualizar detalles de la base de datos y borrar datos de la base de datos según sea necesario.

¿Qué es una aplicación CRUD?

Una aplicación crud depende de las operaciones crud para todas las transacciones y operaciones. Tiene una interfaz de usuario (front end), un controlador o API y una base de datos que maneja las operaciones CRUD.

¿Cuáles son las operaciones CRUD?

Las operaciones CRUD son las funciones básicas que toda aplicación necesita realizar para intercambiar datos con un usuario web: por ejemplo, crear un nuevo perfil de usuario (CREAR), obtener detalles de un producto de una base de datos (LEER), actualizar la información de un empleado en el portal del empleado (ACTUALIZAR) y eliminar un producto particular de un catálogo (ELIMINAR).

¿Qué es CRUD?

CRUD es un acrónimo utilizado para el conjunto básico de operaciones que cada aplicación debe ser capaz de realizar. Significa crear, leer, actualizar y eliminar.

¿Listo para empezar?

Inicie un nuevo clúster o migre a MongoDB Atlas sin tiempo de inactividad.