Cuando trabajes con MongoDB, especialmente si eres un programador procedente de una base de datos relacional, una de las primeras cosas que notarás es lo flexible que puede ser el diseño del esquema.
Las colecciones en MongoDB no necesitan crearse explícitamente de antemano, pero hay ocasiones en las que tiene sentido definirlas explícitamente y configurarlas con cuidado.
En este artículo, veremos cómo y cuándo puedes querer crear una colección en MongoDB, algunas opciones de configuración clave a tener en cuenta y algunos ejemplos de código en JS y C# (mi favorito).
No te preocupes, tenemos mucha paridad de funciones entre los controladores, así que mucho de lo que veas hoy aquí será posible en <inserta el idioma que prefieras>.
Si eres nuevo en las bases de datos NoSQL, considera empezar con una Introducción a NoSQL.
¿Qué es una colección MongoDB?
Antes de ver cómo crear colecciones, hablemos brevemente de lo que es una colección.
Si tienes conocimientos de SQL, puede que estés acostumbrado a oír hablar de tablas, filas y columnas. En MongoDB, los términos son ligeramente diferentes. En lugar de tablas, tenemos colecciones, y en lugar de filas, tenemos documentos con campos y no columnas.
Uno de los superpoderes de MongoDB es su esquema dinámico. Eso significa que no necesitas crear una colección manualmente antes de utilizarla. Si insertas un documento en una colección que todavía no existe, MongoDB lo creará automáticamente. Por ejemplo, si ejecutas
db.movies.insertOne({ title: "The Matrix", year: 1999 });
Intentará insertar un único documento de la película "Matrix" en la colección movies. Si ya existe, el documento se añadirá a la colección. Si no lo hace, la colección movies se creará antes de añadir el nuevo documento.
También puedes añadir muchos documentos a la vez, utilizando insertMany en lugar de insertOne.
Cuándo definir explícitamente las colecciones de MongoDB
Aunque puedes dejar que MongoDB se encargue de la creación de colecciones automáticamente, hay buenas razones para definir las colecciones con antelación, especialmente en escenarios de producción. Crear colecciones explícitamente te da la oportunidad de:
Aplica determinados índices por defecto, como el tiempo de vida (TTL). Estos índices sobre un campo de fecha eliminarán automáticamente los documentos de tu colección en función del tiempo que especifiques.
Optimiza las cargas de trabajo de escritura pesada mediante el pre-dimensionamiento de las colecciones.
db.createCollection("auditLogs",{capped:true,size:10485760,// 10 MBmax:1000});Con la tecnología de
O con validación:
db.createCollection("users",{validator:{$jsonSchema:{bsonType:"object",required:["email","createdAt"],properties:{email:{bsonType:"string",pattern:"^.+@.+$"},createdAt:{bsonType:"date"}}}}});Con la tecnología de
Aunque MongoDB admite un esquema flexible, es posible que quieras añadir reglas de validación, como campos obligatorios, o especificar propiedades en determinados campos, como tipos de datos o formato para correos electrónicos, como se ha visto anteriormente. Si quieres asegurarte de que tus documentos siguen un esquema concreto.
La aplicación de esquemas te resultará familiar si tienes conocimientos de SQL, e incluso si no los tienes, a veces tus aplicaciones en producción necesitan tener documentos con una forma predecible. ¡Así que la validación es excelente para esto!
Creación de colecciones MongoDB con el controlador C#
En una aplicación C#, también puedes crear colecciones explícitamente utilizando el controlador MongoDB. Aunque no es necesario para las operaciones básicas, aquí es donde puedes establecer opciones avanzadas mediante programación.
var options =newCreateCollectionOptions{
Capped =true,
MaxSize =10485760,// 10 MB
MaxDocuments =1000};await database.CreateCollectionAsync("auditLogs", options);Con la tecnología de
Para añadir un validador:
var validator =newBsonDocument{{"$jsonSchema",newBsonDocument{{"bsonType","object"},{"required",newBsonArray{"email","createdAt"}},{"properties",newBsonDocument{{"email",newBsonDocument{{"bsonType","string"},{"pattern","^.+@.+$"}}},{"createdAt",newBsonDocument{{"bsonType","date"}}}}}}}};var collectionOptions =newCreateCollectionOptions<BsonDocument>{
Validator =newBsonDocumentFilterDefinition<BsonDocument>(validator)};await database.CreateCollectionAsync("users", collectionOptions);Con la tecnología de
Opciones clave de configuración de las colecciones que debes conocer
Al crear colecciones explícitamente, aquí tienes algunas opciones que te puede interesar conocer:
capped: crea una colección de tamaño fijo
size: tamaño máximo en bytes de una colección limitada
max: número máximo de documentos permitidos
validator: Objeto JSON en sintaxis de esquema que define la validación del esquema
expireAfterSeconds: se utiliza con índices TTL para gestionar la autoeliminación de documentos
También puedes aplicaríndices en el momento de la creación time o poco después. MongoDB no creará índices automáticamente a menos que sean necesarios para _id.
Los índices en MongoDB te permiten mejorar el rendimiento de los campos a los que accedes con más frecuencia. Guardarán esos valores en caché en la memoria, lo que significa que no habrá que llamar al disco duro para recuperarlos, lo que puede ahorrar mucho tiempo y rendimiento al acceder a ellos de forma habitual.
Buenas prácticas para definir colecciones MongoDB
Aquí tienes algunas pautas que te ayudarán a decidir cuándo definir explícitamente las colecciones:
Creación implícita para pruebas rápidas de concepto o desarrollo local, o cuando el usuario final puede generar el contenido dinámicamente
Creación explícita para cuando quieras aplicar validación o aplicar ajustes de indexación o rendimiento
Conclusión
MongoDB es conocido por su esquema flexible que nos da flexibilidad en cómo estructuramos nuestros datos, y eso incluye cómo creamos y gestionamos colecciones. Mientras que la creación implícita es rápida y cómoda, las definiciones explícitas de colecciones desbloquean potentes funciones como la validación de esquemas, el comportamiento capado y el ajuste del rendimiento.
Como siempre, MongoDB Atlas facilita aún más la gestión de colecciones con herramientas basadas en la interfaz de usuario, automatización y perspectivas de rendimiento integradas. Y si trabajas en .NET, el controlador C# te cubre con modelos de tipos fuertes y API fluidas.
Al considerar las mejores prácticas para definir las colecciones de MongoDB, también puede ser beneficioso comprender losprincipios fundamentales del diseño de bases de datos.
¡Feliz codificación! ¡Que tus colecciones sean rápidas, válidas y estén bien indexadas!
Preguntas frecuentes
¿Cuál es la diferencia entre la creación implícita y explícita de colecciones en MongoDB?⌄
Creación implícita: MongoDB crea automáticamente una colección cuando insertas un documento en una colección inexistente. Esto es útil para la creación rápida de prototipos o el desarrollo.
Creación explícita: Defines manualmente una colección antes de utilizarla, a menudo para configurar opciones avanzadas como reglas de validación, tamaño máximo o indexación. Se recomienda para entornos de producción.
¿Cuándo debo crear explícitamente una colección en lugar de dejar que MongoDB la cree automáticamente?⌄
Debes crear explícitamente una colección cuando: validación de esquemas, colecciones capadas, optimizaciones de rendimiento e índices por defecto.
¿Cómo aplico un esquema en MongoDB si no tiene esquema?⌄
MongoDB admite la validación del esquema JSON, que te permite definir reglas para la estructura del documento.
¿Qué son los cobros limitados y cuándo debo utilizarlos?⌄
Las colecciones limitadas son colecciones de tamaño fijo que sobrescriben automáticamente los documentos antiguos cuando están llenas.
¿Cómo creo una colección con un índice TTL (Time-To-Live)?⌄
Los índices TTL eliminan automáticamente los documentos después de un tiempo determinado. Primero, crea la colección y, después, añade el índice.
Luce Carter es Senior Developer Advocate en MongoDB, MVP de Microsoft, Contentful Dev Hero, autora de Beginning MongoDB Atlas with .NET, y amante del código, el sol y el aprendizaje.
Descubre todo lo que necesitas saber sobre los tipos de modelos de machine learning, incluyendo para qué se utilizan y ejemplos de cómo ponerlos en práctica.
Aprende algunas posibilidades de modelado de datos que incluyen documentos anidados al diseñar un sistema de gestión de contenidos (CMS) o una aplicación de blog.
Aprende a instalar y configurar la base de datos MySQL dentro de contenedores Docker. El tutorial incluye conceptos como conectarse a servidores MySQL, ejecutar clientes MySQL para conectarse a contenedores, etc.
Creamos modelos de datos formateando los datos, creando relaciones, utilizando Power Query y aprovechando Power Pivot para una integración y análisis de datos sin fisuras.
Cuando trabajes con MongoDB, especialmente si eres un programador procedente de una base de datos relacional, una de las primeras cosas que notarás es lo flexible que puede ser el diseño del esquema.
Las colecciones en MongoDB no necesitan crearse explícitamente de antemano, pero hay ocasiones en las que tiene sentido definirlas explícitamente y configurarlas con cuidado.
En este artículo, veremos cómo y cuándo puedes querer crear una colección en MongoDB, algunas opciones de configuración clave a tener en cuenta y algunos ejemplos de código en JS y C# (mi favorito).
No te preocupes, tenemos mucha paridad de funciones entre los controladores, así que mucho de lo que veas hoy aquí será posible en <inserta el idioma que prefieras>.
Si eres nuevo en las bases de datos NoSQL, considera empezar con una Introducción a NoSQL.
¿Qué es una colección MongoDB?
Antes de ver cómo crear colecciones, hablemos brevemente de lo que es una colección.
Si tienes conocimientos de SQL, puede que estés acostumbrado a oír hablar de tablas, filas y columnas. En MongoDB, los términos son ligeramente diferentes. En lugar de tablas, tenemos colecciones, y en lugar de filas, tenemos documentos con campos y no columnas.
Uno de los superpoderes de MongoDB es su esquema dinámico. Eso significa que no necesitas crear una colección manualmente antes de utilizarla. Si insertas un documento en una colección que todavía no existe, MongoDB lo creará automáticamente. Por ejemplo, si ejecutas
db.movies.insertOne({ title: "The Matrix", year: 1999 });Intentará insertar un único documento de la película "Matrix" en la colección
movies. Si ya existe, el documento se añadirá a la colección. Si no lo hace, la colecciónmoviesse creará antes de añadir el nuevo documento.También puedes añadir muchos documentos a la vez, utilizando
insertManyen lugar deinsertOne.Cuándo definir explícitamente las colecciones de MongoDB
Aunque puedes dejar que MongoDB se encargue de la creación de colecciones automáticamente, hay buenas razones para definir las colecciones con antelación, especialmente en escenarios de producción. Crear colecciones explícitamente te da la oportunidad de:
Así es como se crea una colecciónen el terminal de MongoDB:
O con validación:
Aunque MongoDB admite un esquema flexible, es posible que quieras añadir reglas de validación, como campos obligatorios, o especificar propiedades en determinados campos, como tipos de datos o formato para correos electrónicos, como se ha visto anteriormente. Si quieres asegurarte de que tus documentos siguen un esquema concreto.
La aplicación de esquemas te resultará familiar si tienes conocimientos de SQL, e incluso si no los tienes, a veces tus aplicaciones en producción necesitan tener documentos con una forma predecible. ¡Así que la validación es excelente para esto!
Creación de colecciones MongoDB con el controlador C#
En una aplicación C#, también puedes crear colecciones explícitamente utilizando el controlador MongoDB. Aunque no es necesario para las operaciones básicas, aquí es donde puedes establecer opciones avanzadas mediante programación.
Para añadir un validador:
Para los programadores de Python, el tutorial Introducción a MongoDB y Python es un gran recurso.
Opciones clave de configuración de las colecciones que debes conocer
Al crear colecciones explícitamente, aquí tienes algunas opciones que te puede interesar conocer:
capped: crea una colección de tamaño fijosize: tamaño máximo en bytes de una colección limitadamax: número máximo de documentos permitidosvalidator: Objeto JSON en sintaxis de esquema que define la validación del esquemaexpireAfterSeconds: se utiliza con índices TTL para gestionar la autoeliminación de documentosTambién puedes aplicar índices en el momento de la creación time o poco después. MongoDB no creará índices automáticamente a menos que sean necesarios para
_id.Los índices en MongoDB te permiten mejorar el rendimiento de los campos a los que accedes con más frecuencia. Guardarán esos valores en caché en la memoria, lo que significa que no habrá que llamar al disco duro para recuperarlos, lo que puede ahorrar mucho tiempo y rendimiento al acceder a ellos de forma habitual.
Buenas prácticas para definir colecciones MongoDB
Aquí tienes algunas pautas que te ayudarán a decidir cuándo definir explícitamente las colecciones:
Conclusión
MongoDB es conocido por su esquema flexible que nos da flexibilidad en cómo estructuramos nuestros datos, y eso incluye cómo creamos y gestionamos colecciones. Mientras que la creación implícita es rápida y cómoda, las definiciones explícitas de colecciones desbloquean potentes funciones como la validación de esquemas, el comportamiento capado y el ajuste del rendimiento.
Como siempre, MongoDB Atlas facilita aún más la gestión de colecciones con herramientas basadas en la interfaz de usuario, automatización y perspectivas de rendimiento integradas. Y si trabajas en .NET, el controlador C# te cubre con modelos de tipos fuertes y API fluidas.
Al considerar las mejores prácticas para definir las colecciones de MongoDB, también puede ser beneficioso comprender losprincipios fundamentales del diseño de bases de datos.
¡Feliz codificación! ¡Que tus colecciones sean rápidas, válidas y estén bien indexadas!