10 - Borrar documentos de una colección con los métodos deleteOne y deleteMany

Hemos visto en conceptos anteriores que podemos eliminar todos los documentos de una colección mediante el método deleteMany y pasando un objeto literal vacío:

db.libros.deleteMany({})

Aprendimos también a recuperar algunos documentos con el método find empleando una serie de operadores relacionales, dichos operadores se pueden emplear en forma idéntica con los métodos deleteMany y deleteOne.

Hay dos métodos para eliminar documentos:

  • deleteMany: Borra todos los documentos que cumplen la condición que le enviamos.
  • deleteOne: Borra el primer documento que cumple la condición que le pasamos.

    Almacenaremos una serie de documentos en una colección llamada libros y luego borraremos algunos de sus documentos:

    use base1
    db.libros.drop()
    
    db.libros.insertOne(
      {
        _id: 1,  
        titulo: 'El aleph',
        autor: 'Borges',
        editorial: ['Siglo XXI','Planeta'],
        precio: 20,
        cantidad: 50 
      }
    )
    db.libros.insertOne(
      {
        _id: 2,  
        titulo: 'Martin Fierro',
        autor: 'Jose Hernandez',
        editorial: ['Siglo XXI'],
        precio: 50,
        cantidad: 12
      }
    )
    db.libros.insertOne(
      {
        _id: 3,  
        titulo: 'Aprenda PHP',
        autor: 'Mario Molina',
        editorial: ['Siglo XXI','Planeta'],
        precio: 50,
        cantidad: 20
      }
    )
    db.libros.insertOne(
      {
        _id: 4,  
        titulo: 'Java en 10 minutos',
        editorial: ['Siglo XXI'],
        precio: 45,
        cantidad: 1 
      }
    )
    
    db.libros.find()
    
    db.libros.deleteOne({_id: 1})
    
    db.libros.find()
    
    db.libros.deleteMany({precio : {$gte : 50 }})
    
    db.libros.find()
    

    Si queremos eliminar el documento que almacena en el campo el _id con valor 1 luego podemos utilizar la sintaxis:

    db.libros.deleteOne({_id: 1})
    

    Lo más conveniente es utilizar el método 'deleteOne' ya que solo uno puede cumplir esa condición al ser la clave primaria del documento.

    Recordemos que la sintaxis alternativa para eliminar el documento con _id con valor 1 es:

    db.libros.deleteOne({_id: { $eq : 1}})
    

    La sintaxis anterior es buena recordar ya que los otros operadores relacionales hay que utilizarlos en forma obligatoria y no tienen una sintaxis alternativa como el $eq.

    Para borrar todos los libros que tienen un precio mayor o igual a 50 tenemos:

    db.libros.deleteMany({precio : {$gte : 50 }})
    

    La ejecución del método deleteOne y deleteMany informa la cantidad de documentos eliminados:

    MongoDB método deleteOne deleteMany con parámetros

    Problemas propuestos

    1. Crear la colección 'articulos' en la base de datos 'base1' (eliminar la colección previamente), cargar luego 6 documentos:

      use base1
      db.articulos.drop()
      
      db.articulos.insertOne(
        {
          _id: 1,  
          nombre: 'MULTIFUNCION HP DESKJET 2675',
          rubro: 'impresora',
          precio: 3000,
          stock: 20 
        }
      )
      db.articulos.insertOne(
        {
          _id: 2,  
          nombre: 'MULTIFUNCION EPSON EXPRESSION XP241',
          rubro: 'impresora',
          precio: 3700,
          stock: 5 
        }
      )
      db.articulos.insertOne(
        {
          _id: 3,  
          nombre: 'LED 19 PHILIPS',
          rubro: 'monitor',
          precio: 4500,
          stock: 2
        }
      )
      db.articulos.insertOne(
        {
          _id: 4,  
          nombre: 'LED 22 PHILIPS',
          rubro: 'monitor',
          precio: 5700,
          stock: 4
        }
      )
      db.articulos.insertOne(
        {
          _id: 5,  
          nombre: 'LED 27 PHILIPS',
          rubro: 'monitor',
          precio: 12000,
          stock: 1
        }
      )
      
      db.articulos.insertOne(
        {
          _id: 6,  
          nombre: 'LOGITECH M90',
          rubro: 'mouse',
          precio: 300,
          stock: 4
        }
      )
      
      
    2. Imprimir todos los documentos de la colección 'articulos'.

    3. Borrar los documentos de la colección 'articulos' cuyo rubro son impresoras, utilizar las dos sintaxis que permite MongoDB.

    4. Borrar todos los artículos que tienen un _id mayor o igual a 5.

    Solución
    
    db.articulos.drop()
    
    db.articulos.insertOne(
      {
        _id: 1,  
        nombre: 'MULTIFUNCION HP DESKJET 2675',
        rubro: 'impresora',
        precio: 3000,
        stock: 20 
      }
    )
    db.articulos.insertOne(
      {
        _id: 2,  
        nombre: 'MULTIFUNCION EPSON EXPRESSION XP241',
        rubro: 'impresora',
        precio: 3700,
        stock: 5 
      }
    )
    db.articulos.insertOne(
      {
        _id: 3,  
        nombre: 'LED 19 PHILIPS',
        rubro: 'monitor',
        precio: 4500,
        stock: 2
      }
    )
    db.articulos.insertOne(
      {
        _id: 4,  
        nombre: 'LED 22 PHILIPS',
        rubro: 'monitor',
        precio: 5700,
        stock: 4
      }
    )
    db.articulos.insertOne(
      {
        _id: 5,  
        nombre: 'LED 27 PHILIPS',
        rubro: 'monitor',
        precio: 12000,
        stock: 1
      }
    )
    
    db.articulos.insertOne(
      {
        _id: 6,  
        nombre: 'LOGITECH M90',
        rubro: 'mouse',
        precio: 300,
        stock: 4
      }
    )
    
    db.articulos.find()
    
    db.articulos.deleteMany({rubro:'impresora'})
    db.articulos.deleteMany({rubro:{$eq : 'impresora' }})
    
    db.articulos.find()
    
    db.articulos.deleteMany({_id:{$gte : 5 }})
    
    db.articulos.find()