15 - Recuperar algunos campos de una colección con el método find

Hemos visto que el método 'find':

  • Si no le pasamos parámetros nos retorna todos los documentos de la colección que hace referencia:

    db.libros.find()
    
  • El primer parámetro en el caso que lo indiquemos filtra la colección y recupera los documentos que cumplen la condición:

    db.libros.find({precio : 50 })
    

    Recuperamos todos los libros que tienen un precio igual a 50.

  • Hay un segundo parámetro opcional en el cual debemos indicar que campos del documento queremos recuperar:

    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({precio : 50 },{titulo:1,cantidad:1})
    

    En el segundo parámetro del método 'find' debemos especificar cada campo y un valor 1 indicando que se lo quiere recuperar. El campo _id se recupera por defecto, salvo que indiquemos con un valor 0 para que no se recupere:

    MongoDB Cursor método find segundo parámetro

    Solo se recuperan los campos titulo,cantidad y _id.

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', mostrar solo los campos _id y nombre.

  3. Imprimir todos los documentos de la colección 'articulos' que son impresoras, mostrar solo los campos nombre y precio.

  4. Imprimir todas las impresoras que tienen un precio mayor o igual a 3500. Solo mostrar los campos _id, nombre, precio y stock

  5. Imprimir todos los documentos de la colección 'articulos' que son monitor, mostrar solo los campos nombre y precio ordenados de menor a mayor.

Solución
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
  }
)

db.articulos.find({},{nombre:1})

db.articulos.find({ rubro : 'impresora' }, {_id:0, nombre:1, precio:1})

db.articulos.find({ rubro : {$eq: 'mouse'} })

db.articulos.find({ precio : {$gte: 5000} }, {nombre:1, precio:1, stock:1})

db.articulos.find({ rubro : 'monitor' }, {_id:0, nombre:1, precio:1}).sort({precio:1})