Este documento responde a algunas preguntas comunes sobre MongoDB.
¿Qué plataformas admite MongoDB?
Para ver la lista de las plataformas compatibles, consulta Soporte de plataforma.
¿Se ofrece MongoDB como un servicio alojado?
Sí. MongoDB Atlas es una base de datos como servicio en la nube.
¿En qué se diferencia una colección de una tabla?
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.
¿Cómo puedo crear una base de datos y una colección?
Nota
Puedes introducir los comandos en estas preguntas frecuentes usando mongosh, una interfaz interactiva de JavaScript para MongoDB.
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 } );
El método
db.collection.insertOne()crea la colecciónmyNewCollection1si aún no existe.El método
db.collection.createIndex()crea el índice y la colecciónmyNewCollection2si aún no existen.Si la base de datos
myNewDbno existiera, el métododb.collection.createIndex()o el métododb.collection.insertOne()habría creado la base de datosmyNewDbautomáticamente.
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");
¿Cómo defino o modifico el esquema de la colección?
En MongoDB, no es necesario especificar un esquema para una colección. Si bien es común que los documentos de una colección tengan una estructura bastante homogénea, no es necesario que tengan el mismo conjunto de campos. El tipo de datos de un campo también puede variar entre los documentos 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 el tamaño máximo, se pueden configurar durante la creación explícita de la db.createCollection() colección mediante el método y modificarse posteriormente con el collMod comando. Si no necesita configurar estas propiedades, no es necesario crear la colección explícitamente. MongoDB crea nuevas colecciones cuando se almacenan datos en ellas por primera vez.
¿MongoDB es compatible con SQL?
No, pero MongoDB admite su propio lenguaje de consulta avanzado. Para ver ejemplos de cómo usar el 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.
¿MongoDB admite transacciones?
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.
¿MongoDB gestiona el almacenamiento en caché?
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.
¿Cómo aborda MongoDB la inyección de código SQL o de query?
BSON
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.
JavaScript
Nota
Puede desactivar toda la ejecución de JavaScript del lado del servidor:
Para una instancia de
mongodpasando la opción--noscriptingen la línea de comandos o configurandosecurity.javascriptEnabledcomo falso en el archivo de configuración.Para una instancia de
mongospasando la opción--noscriptingen la línea de comandos o configurandosecurity.javascriptEnabledcomo falso en el archivo de configuración.
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.