HOWTO · MongoDB

Cómo seleccionar uno o varios campos de todos los documentos de una colección de MongoDB

En este artículo del tutorial de MongoDB, aprenderá cómo seleccionar uno o varios campos para todos los documentos proporcionados en una colección de MongoDB realizando operaciones de consulta básicas a través de la proyección que especifica o restringe los campos para devolver.

En esta página

Para seleccionar campos de documentos de MongoDB, pasa un documento de proyección como segundo argumento de find(). Usa 1 para cada campo que quieras incluir y, cuando sea necesario, _id: 0 para omitir el identificador que MongoDB incluye de forma predeterminada.

Seleccionar campos de una colección de MongoDB mediante una proyección

Una proyección controla qué campos devuelve MongoDB en cada documento que coincide con el filtro. El primer argumento de find() es el filtro; el segundo es la proyección. Un filtro vacío, {}, coincide con todos los documentos de la colección.

Para ver un ejemplo práctico, conecta mongosh a un servidor de MongoDB e inserta un conjunto pequeño de documentos en la colección teams. Estos comandos usan los nombres de campo literales team, position y points; son ejemplos de sintaxis y no se ejecutan aquí:

db.teams.insertMany([{ team: "Manchester City", position: "1st", points: 70 }, { team: "Liverpool", position: "2nd", points: 69 }, { team: "Chelsea", position: "3rd", points: 59 }]) Si vuelves a ejecutar esta inserción, se añadirá otro conjunto de documentos; usa una colección nueva si quieres repetir el ejemplo.

Para ver todos los campos de los documentos insertados, ejecuta db.teams.find({}). El shell muestra los documentos coincidentes, incluidos sus valores _id generados. Resultado representativo (ilustrativo; los valores de ObjectId varían): { _id: ObjectId("<generated id>"), team: "Manchester City", position: "1st", points: 70 }, { _id: ObjectId("<generated id>"), team: "Liverpool", position: "2nd", points: 69 }, { _id: ObjectId("<generated id>"), team: "Chelsea", position: "3rd", points: 59 }. Los ejemplos siguientes usan la misma colección y devuelven campos de esos documentos.

Incluir campos específicos y excluir _id

Asigna 1 a un campo en la proyección para incluirlo. Por ejemplo, db.teams.find({}, { team: 1 }) devuelve el campo team de cada documento coincidente y también incluye _id de forma predeterminada. Resultado representativo (ilustrativo; los valores de ObjectId varían): { _id: ObjectId("<generated id>"), team: "Manchester City" }, { _id: ObjectId("<generated id>"), team: "Liverpool" }, { _id: ObjectId("<generated id>"), team: "Chelsea" }. La proyección no cambia el nombre del campo: su identificador en la base de datos sigue siendo team.

Para devolver team sin el identificador, añade _id: 0: db.teams.find({}, { team: 1, _id: 0 }). Resultado representativo (ilustrativo): { team: "Manchester City" }, { team: "Liverpool" }, { team: "Chelsea" }. MongoDB permite excluir _id mientras se incluyen otros campos. Esta es la excepción a la regla general de las proyecciones: no se pueden combinar inclusiones y exclusiones de campos ordinarios en una misma proyección. Por ejemplo, no combines team: 1 con points: 0; en su lugar, enumera los campos que quieras incluir.

Para incluir más de un campo y omitir _id, usa db.teams.find({}, { team: 1, points: 1, _id: 0 }). Cada documento devuelto contiene team y points. Resultado representativo (ilustrativo): { team: "Manchester City", points: 70 }, { team: "Liverpool", points: 69 }, { team: "Chelsea", points: 59 }. Para incluir el identificador junto con estos campos, omite _id de la proyección o asigna _id: 1.

La consulta find() devuelve un cursor con los documentos coincidentes, que mongosh muestra de forma interactiva. Una proyección cambia los campos de cada documento devuelto; no limita cuántos documentos coinciden. Añade criterios de filtro como primer argumento si también quieres restringir los documentos devueltos, además de elegir sus campos.

Resumen

Pasa una proyección como segundo argumento de find() y usa 1 para incluir uno o varios campos. MongoDB incluye _id de forma predeterminada, así que añade _id: 0 cuando quieras omitirlo. Las proyecciones de inclusión pueden excluir _id; en los demás casos, mantén la proyección en modo de inclusión o de exclusión.