Docs Menu
Docs Home
/
Manual de base de datos
/

FAQ: MongoDB Fundamentals

Este documento responde a algunas preguntas comunes sobre MongoDB.

Para ver la lista de plataformas compatibles, consulte Soporte de plataforma.

Sí. MongoDB Atlas es un servicio de base de datos en la nube. Para obtener más información, visita MongoDB Atlas.

En lugar de tablas, una base de datos de MongoDB almacena sus datos en colecciones. Una colección contiene uno o más documentos BSON. Los documentos son análogos a los registros o filas en una tabla de base de datos relacional. Cada documento tiene uno o más campos; los campos son similares a las columnas de una tabla de base de datos relacional.

Tip

Nota

Si no existe una base de datos, MongoDB crea la base de datos cuando almacenas datos por primera vez para esa base de datos.

Si una colección no existe, MongoDB crea la colección cuando se almacenan datos por primera vez para esa colección.

Por lo tanto, puede cambiar a una base de datos inexistente (use <dbname>) y realizar la siguiente operación:

use myNewDB;
db.myNewCollection1.insertOne( { x: 1 } );
db.myNewCollection2.createIndex( { a: 1 } );

También puedes crear una colección explícitamente usando el método db.createCollection() si quieres especificar opciones determinadas, como tamaño máximo o reglas de validación de esquema:

use myNewDB;
db.createCollection("myNewCollection1");

No es necesario que especifique un esquema para una colección en MongoDB. Aunque es común que los documentos de una colección tengan una estructura en gran medida homogénea, no es un requisito; es decir, los documentos de una sola colección no necesitan tener el mismo conjunto de campos. El tipo de dato de un campo también puede diferir entre documentos dentro de una colección.

Para modificar la estructura de los documentos en una colección, actualiza los documentos a la nueva estructura. Por ejemplo, añadir nuevos campos, remover los existentes o actualizar el valor de un campo a un nuevo tipo.

Nota

Puedes aplicar reglas de validación de esquema para una colección durante las operaciones de actualización e inserción.

Algunas propiedades de la colección, como especificar un tamaño máximo, pueden definirse durante la creación explícita de una colección y modificarse. Consulta db.createCollection() y collMod. Si no especificas estas propiedades, no necesitas crear explícitamente la colección, ya que MongoDB crea nuevas colecciones cuando almacena datos por primera vez en ellas.

No directamente. Sin embargo, MongoDB admite su propio lenguaje de consulta enriquecido. Para ver ejemplos sobre el uso del lenguaje de consulta de MongoDB, consulte Operaciones CRUD de MongoDB.

También puedes usar MongoDB Connector para BI para hacer una query a las colecciones de MongoDB con SQL.

Debido a que un único documento puede contener datos relacionados que, de otro modo, se modelarían en tablas principal-secundario separadas en un esquema relacional, las operaciones atómicas de un solo documento de MongoDB ya proporcionan una semántica de transacción que satisface las necesidades de integridad de datos de la mayoría de las aplicaciones. Uno o más campos pueden guardarse en una sola operación, incluidas las actualizaciones de múltiples subdocumentos y elementos de un arreglo. Las garantías que ofrece MongoDB aseguran un aislamiento completo al actualizarse un documento; cualquier error provoca que la operación se revierta para que los clientes reciban una vista coherente del documento.

Para situaciones que requieren atomicidad de las lecturas y escrituras en varios documentos (en una sola colección o en varias), MongoDB admite transacciones distribuidas, incluidas las transacciones en sets de réplica y clústeres fragmentados.

Para obtener más información, consulta transacciones.

Importante

En la mayoría de los casos, una transacción distribuida incurre en un costo de rendimiento mayor que las escrituras de documentos individuales, y la disponibilidad de transacciones distribuidas no debería ser un sustituto para un diseño de esquema efectivo. Para muchos casos, el modelo de datos desnormalizado (documento incrustado y matrices) seguirá siendo óptimo para tus datos y casos de uso. Es decir, en muchos casos, modelar tus datos de forma adecuada minimizará la necesidad de transacciones distribuidas.

Para consideraciones adicionales sobre el uso de transacciones (como el límite de tiempo de ejecución y el límite de tamaño del oplog), consulta también las consideraciones de producción.

Sí. MongoDB mantiene los datos que se usaron más recientemente en la RAM. Si se han creado índices para las queries y el conjunto de datos de trabajo cabe en la RAM, MongoDB atiende todas las queries desde la memoria.

MongoDB no almacena en caché los resultados de las queries para devolver los resultados almacenados en caché para queries idénticas.

Para obtener más información sobre MongoDB y el uso de memoria, consulta WiredTiger y el uso de la memoria.

Cuando un programa cliente ensambla una query en MongoDB, compila un objeto BSON, no una string. Por lo tanto, los ataques tradicionales por inyección de código SQL no representan un problema. A continuación, se presentan más detalles y algunos matices.

MongoDB representa las queries como objetos BSON. Por lo general, las librerías de clientes brindan un proceso cómodo y sin inyecciones para compilar estos objetos. Considera el siguiente ejemplo de C++:

BSONObj my_query = BSON( "name" << a_name );
auto_ptr<DBClientCursor> cursor = c.query("tutorial.persons", my_query);

Aquí, my_query entonces tendrá un valor como { name : "Joe" }. Si my_query contuviera caracteres especiales, por ejemplo, ,, : y {, la query, simplemente, no coincidiría con ningún documento. Por ejemplo, los usuarios no pueden secuestrar una query y convertirla en borrar.

Nota

Puede desactivar toda la ejecución de JavaScript del lado del servidor:

Las siguientes operaciones de MongoDB le permiten ejecutar expresiones JavaScript arbitrarias directamente en el servidor:

En estos casos, debes actuar con cuidado para evitar que los usuarios envíen JavaScript malicioso.

Afortunadamente, puedes expresar la mayoría de las operaciones en MongoDB sin JavaScript.

Volver

FAQ