$project en las operaciones de agregación en MongoDB

El operador $project en las operaciones de agregación en MongoDB te permite dar forma a la salida de tus consultas, seleccionando los campos que deseas mostrar y aplicando transformaciones a esos campos. Es una de las etapas fundamentales en las operaciones de agregación y te permite personalizar los resultados de tu consulta.


Conexión a la base de datos

Antes de realizar operaciones de agregación, debes conectarte a la base de datos. Puedes usar un cliente MongoDB o una biblioteca de MongoDB en un lenguaje de programación como Node.js.

Node.js:

const { MongoClientrequire("mongodb");

const uri = "mongodb://localhost:27017/tu_base_de_datos";
const client = new MongoClient(uri);

async function conectar() {
  try {
    await client.connect();
    console.log("Conexión exitosa a la base de datos");
  } catch (error) {
    console.error("Error al conectar a la base de datos:", error);
  }
}

conectar();

Utilizar el operador $project

El operador $project se utiliza en las operaciones de agregación para dar forma a la salida de la consulta. Puedes seleccionar los campos que deseas mostrar y aplicar expresiones para realizar transformaciones en los datos. Veamos algunos ejemplos.


Seleccionar campos específicos

const pipeline = [
  {
    $project: {
      _id: 0, // Para excluir el campo _id
      nombre: 1, // Para incluir el campo 'nombre'
      edad: 1 // Para incluir el campo 'edad'
    }
  }
];

const collection = client.db("tu_base_de_datos").collection("tu_coleccion");
const resultado = await collection.aggregate(pipeline).toArray();
console.log(resultado);

En este ejemplo, estamos seleccionando explícitamente los campos ‘nombre’ y ‘edad’ para mostrar en los resultados y excluyendo el campo ‘_id’.


Aplicar transformaciones a los campos

Puedes utilizar expresiones para aplicar transformaciones a los campos durante la etapa de proyección. Por ejemplo, puedes calcular un nuevo campo a partir de otros campos existentes.

const pipeline = [
  {
    $project: {
      _id: 0,
      nombre: 1,
      edad: 1,
      edadEnDosAños: { $add: [ '$edad', 2 ] } // Calcular la edad en dos años
    }
  }
];

const collection = client.db('tu_base_de_datos').collection('tu_coleccion');
const resultado = await collection.aggregate(pipeline).toArray();
console.log(resultado);

En este ejemplo, estamos calculando el campo ‘edadEnDosAños’ al sumar 2 a la edad actual.


Renombrar campos

También puedes utilizar $project para renombrar campos.

const pipeline = [
  {
    $project: {
      _id: 0, // Excluir el campo '_id'
      nombre_completo: "$nombre", // Renombrar el campo 'nombre' a 'nombre_completo'
      edad: 1
    }
  }
];

const collection = client.db("tu_base_de_datos").collection("tu_coleccion");
const resultado = await collection.aggregate(pipeline).toArray();
console.log(resultado);

En este caso, hemos renombrado el campo ‘nombre’ a ‘nombre_completo’.

El operador $project es muy versátil y te permite dar forma a tus resultados de agregación de acuerdo a tus necesidades específicas. Asegúrate de ajustar las proyecciones y expresiones a tu caso de uso particular.