Esta página describe Calíope 1.5, la versión que estoy construyendo ahora mismo. La 1.4 ya está en la App Store para Mac, iPad, iPhone, Apple Watch, Apple TV y Apple Vision Pro. El changelog dice en qué versión llegó cada función.
Añade un botón «Abrir en Calíope» a cada tema. Sólo funciona con la app instalada.
Cómo moverse por las bases, colecciones y documentos de un servidor MongoDB.
Dónde está: Espacio de Trabajo › Herramientas › Colecciones
El explorador muestra a la izquierda las colecciones de la base elegida y a la derecha sus documentos, como árboles que se pliegan.
Un documento no es una fila: dos documentos vecinos pueden no compartir ningún campo, y por eso no se dibuja una rejilla de columnas. Junto a cada valor aparece su tipo —ObjectId, decimal128, fecha, binario—, que en una base sin esquema es la mitad de la información.
Para editar, pulsa el lápiz: el documento se abre como JSON extendido y se guarda entero, identificándolo por su _id. Sin _id no se puede editar ni borrar, y así se dice en lugar de ofrecer botones que tocarían otro documento. Las vistas son de solo lectura y se marcan como tales; las colecciones capadas también se señalan.
El menú de arriba cambia de base, y Filtrar acota por nombre la lista de colecciones. Los documentos llegan en lotes de 50: el pie cuenta los de la colección y los cargados, y Cargar más, al final de la lista, trae el lote siguiente. Documento nuevo abre el mismo editor, vacío; Formatear reindenta lo escrito y, si no se puede leer, dice por qué sin tocar el texto.
Filtros, proyecciones, orden y pipelines de agregación.
Dónde está: Espacio de Trabajo › Herramientas › Consulta
La herramienta de consulta tiene dos modos. «Buscar» aplica un filtro, una proyección y un orden, los tres escritos como documentos JSON. «Agregación» ejecuta un pipeline completo, que es una lista de etapas.
El menú «Colección» elige qué consultar, de la base elegida en «Colecciones», y «Ejecutar» (⌘↩) la envía. El pie cuenta los documentos cargados y los milisegundos que tardó el servidor. Los campos admiten JSON extendido, así que {"$date": …} y {"$oid": …} llegan al servidor como fecha y como ObjectId, no como texto. Un pipeline que no es una lista se detecta antes de enviar nada; lo demás que el servidor rechace vuelve con su propio mensaje.
Los resultados llegan por páginas: se piden más con «Cargar más», y el cursor abierto en el servidor se cierra al cambiar de consulta —uno abandonado sigue vivo diez minutos ocupando memoria.
Los resultados no se editan aquí: una agregación no tiene documento original al que devolver los cambios, y con una proyección faltarían campos que al guardar se perderían. Para editar está el explorador.
Los operadores escritos en el filtro y en el pipeline tienen ficha: se explica en el tema Ayuda contextual de funciones SQL.
Ver, crear y eliminar índices, incluidos únicos, dispersos y con caducidad.
Dónde está: Espacio de Trabajo › Herramientas › Índices
Elige una colección en el menú Colección de la barra; las vistas no aparecen, porque una vista no tiene índices propios. La lista muestra cada índice por su nombre, con sus claves debajo y sus propiedades como etiquetas: único, disperso o con caducidad (TTL). Un índice de texto muestra los campos que cubre, cada uno con «text». Actualizar vuelve a leer la lista del servidor.
Índice nuevo abre una hoja con un Nombre, las Claves escritas como un documento (1 es ascendente, -1 descendente, y también valen «text» o «2dsphere» para índices de texto y espaciales) y tres interruptores: único, disperso y Caducidad (TTL). Con caducidad, Segundos es lo que vive un documento desde la fecha del campo indexado. Crear lo envía al servidor; si el servidor lo rechaza, por ejemplo porque un índice único encuentra valores repetidos, su mensaje aparece en la hoja, que sigue abierta.
El índice de _id no se puede eliminar porque lo mantiene el servidor, así que no se ofrece el botón. Cualquier otro se elimina con su papelera, tras una confirmación, y las consultas que lo usaban recorrerán la colección entera.
Lo que en el lado relacional son el panel, los procesos y los usuarios.
Dónde está: Espacio de Trabajo › Herramientas › Servidor
Reúne tres cosas que en MongoDB salen de tres comandos del servidor, una por sección del control segmentado: Servidor (host, versión, tiempo en marcha, conexiones, memoria y operaciones acumuladas), Operaciones (lo que el servidor está haciendo ahora mismo) y Usuarios (los usuarios con sus roles). Nada se actualiza solo: cada sección se lee al abrirla, y Actualizar la vuelve a leer.
En Operaciones, cada fila dice el tipo de operación, su espacio de nombres, cuántos segundos lleva y la conexión de la que viene. Incluir inactivas añade las conexiones abiertas que no hacen nada y los hilos del servidor que están en reposo. Detener operación le pide al servidor que termine una, y sólo se ofrece en las que vienen de un cliente: los hilos del propio servidor, como Checkpointer, no llevan botón, porque no los detendría.
Usuarios lista todos los usuarios del servidor, de todas las bases, como usuario@base: un usuario vive en una base. Un rol de otra base lleva su propia @. Los roles personalizados pertenecen a una base concreta, así que se listan los de la base elegida en las otras pestañas, y el título de la sección la nombra.
El profiler de MongoDB: en qué nivel está cada base y qué ha grabado.
Dónde está: Espacio de Trabajo › Herramientas › Profiler
El profiler tiene tres niveles: apagado, sólo las operaciones que pasan del umbral, y todas. El umbral va en milisegundos —no en segundos, como el de MySQL— y el muestreo, entre 0 y 1, dice qué proporción de las lentas se graba: con menos de 1 el servidor descarta lentas a propósito.
El nivel es de cada base, no del servidor. Por eso la barra lleva su selector de base y todo lo que se lee y se escribe va referido a la elegida. Y vive en memoria: al reiniciar el servidor vuelve a lo que diga su configuración de arranque.
Lo grabado va a «system.profile», una colección capada de 1 MB por base: es una ventana de las últimas operaciones, no un historial, y sus documentos no tienen «_id», así que se leen y no se editan. Vaciarla suelta la colección, y para eso hay que apagar el profiler un momento: Calíope lo apaga, la suelta y devuelve el nivel que había.
Debajo, la lista enseña lo que guarda «system.profile», de lo más reciente a lo más antiguo: hora, operación, espacio de nombres, milisegundos y, cuando el servidor los apunta, el plan, los documentos y las claves examinados, los documentos devueltos y el cliente. Se leen sólo las 200 últimas, y el pie lo dice. Un doble clic o Return en el Mac, o un toque en el iPad, abre el documento grabado entero; desde ahí, y desde el menú de la fila, «Copiar el JSON» lo copia y «Copiar y abrir Consulta» copia sólo su comando y abre Consulta. «Refrescar solo (10 s)» vuelve a leerlo todo cada diez segundos, «Leído» dice cuándo fue la última vez, y «Actualizar» relee además la lista de bases.
«Nivel», «Umbral» y «Muestreo» no cambian nada hasta «Aplicar», y después Calíope vuelve a leer el profiler: el servidor contesta con los valores de antes, no con los nuevos.
No hay vista «por sentencia» como en el registro de consultas lentas relacional: MongoDB no publica un resumen agregado por forma de operación, y calcularlo en el cliente sobre una ventana de 1 MB afirmaría más de lo que el dato aguanta.
En Atlas compartido y detrás de «mongos» no se puede poner el nivel 1 ni el 2: ahí el servidor sólo acepta el 0.
Dónde está: Espacio de Trabajo › Herramientas › Comandos
En MongoDB un comando es un documento, y esta herramienta lo manda tal cual y enseña la respuesta completa.
Sirve para lo que ninguna interfaz cubre: validar una colección, pedir estadísticas, explicar una consulta o cualquier comando administrativo. Se escribe el documento en el editor y se pulsa Ejecutar (⌘↩). El menú Ejemplos trae los más frecuentes ya escritos; los que actúan sobre una colección llevan «COLECCIÓN» donde va su nombre.
El menú del principio de la barra elige contra qué base se manda, porque algunos comandos sólo se aceptan en «admin»: getCmdLineOpts, por ejemplo, que enseña las opciones con que arrancó el servidor.
La respuesta llega como un árbol, y la flecha junto a un subdocumento o un array lo abre. Si el texto no es JSON válido, Calíope dice dónde antes de mandar nada; si el servidor rechaza el comando, el aviso trae su código y su nombre. Una escritura también puede aceptarse a medias: un insert que un validador rechaza contesta igual ok: 1, y el documento rechazado viene dentro de writeErrors, con la regla que incumplió.