Inicio › Herramientas para desarrolladores › Probador de consultas MongoDB

Probador de consultas MongoDB

Prueba consultas de MongoDB sin base de datos. Pega documentos (o usa los productos y pedidos de ejemplo), escribe un filtro find() o un pipeline de agregación con la sintaxis normal de mongosh y ve al instante los documentos que coinciden, etapa por etapa si quieres.

Última actualización:

Un array JSON es una colección; un objeto de arrays como {"products": [...], "orders": [...]} da varias colecciones para $lookup. Funcionan tanto Extended JSON ($oid, $date) como la sintaxis del shell (ObjectId(), ISODate()).

Comando mongosh

Publicidad
Publicidad

Cómo usar Probador de consultas MongoDB

  1. Carga los documentos: usa los productos y pedidos de ejemplo, pega un array JSON (por ejemplo de mongoexport --jsonArray o Compass) o sube un archivo .json.
  2. Elige find() o aggregate() y selecciona la colección que quieres consultar.
  3. Escribe la consulta con sintaxis de mongosh, como { price: { $lt: 50 } }, o haz clic en un ejemplo.
  4. Lee los resultados en JSON o en tabla. En el modo aggregate, usa Mostrar salida después de para inspeccionar cada etapa.
  5. Copia el comando mongosh para ejecutar la misma consulta en tu base de datos real.

Chuleta de operadores de consulta de MongoDB

OperadorCoincide con documentos donde…Ejemplo
$eq / valor simpleel campo es igual al valor (o lo es un elemento del array){ status: "shipped" }
$neel campo no es igual, incluidos los documentos sin ese campo{ status: { $ne: "cancelled" } }
$gt $gte $lt $lteel valor está en un rango (solo del mismo tipo){ price: { $gte: 10, $lt: 50 } }
$in / $ninel valor (no) es uno de una lista{ category: { $in: ["home", "kitchen"] } }
$existsel campo está presente (true) o ausente (false){ discontinued: { $exists: true } }
$typeel valor tiene un tipo BSON{ price: { $type: "number" } }
$regex o /re/una cadena coincide con una expresión regular{ name: /^cast/i }
$and $or $norcombinaciones de filtros completos{ $or: [ { stock: 0 }, { price: { $gt: 70 } } ] }
$notuna expresión de operador es falsa{ price: { $not: { $gt: 50 } } }
$allun array contiene todos los valores indicados{ tags: { $all: ["wood", "kitchen"] } }
$elemMatchun elemento del array cumple todas las condiciones{ ratings: { $elemMatch: { user: "ana", score: 5 } } }
$sizeun array tiene exactamente n elementos{ ratings: { $size: 0 } }
$expruna expresión de agregación es verdadera (compara dos campos){ $expr: { $gt: ["$qty", "$stock"] } }

Etapas de agregación de un vistazo

EtapaFinalidadConsejo
$matchFiltra documentos con la misma sintaxis que find()Ponla primero para que las etapas posteriores procesen menos documentos
$project / $addFieldsReestructura: conserva, elimina, renombra o calcula campos$addFields conserva todos los campos existentes
$groupAgrega por una clave con $sum, $avg, $min, $max, $push, $addToSet, $first, $last_id: null agrupa todos los documentos juntos
$unwindGenera un documento por cada elemento del arrayAñade preserveNullAndEmptyArrays: true para conservar los arrays vacíos
$lookupUnión externa izquierda con otra colecciónEl resultado es siempre un array; añade después $unwind para una sola coincidencia
$sort, $skip, $limitOrdenar y paginarOrdena también por un campo único para una paginación estable
$facetEjecuta varios subpipelines sobre la misma entradaIdeal para obtener un recuento y una página de resultados en una sola consulta
$bucket, $sortByCount, $countHistogramas, tablas de frecuencia y totales$sortByCount: "$tags" tras $unwind clasifica las etiquetas

Reglas que suelen sorprender

  • Agrupación por tipos: { price: { $gt: "10" } } solo compara cadenas, así que nunca coincide con precios numéricos. Guarda y consulta los números como números.
  • null coincide con ausentes: { discontinued: null } devuelve documentos donde el campo es null o no existe. Usa { $exists: false } o { $type: "null" } para distinguirlos.
  • Proyecciones: no puedes mezclar 1 y 0 en una misma proyección, salvo _id: 0. _id se incluye a menos que lo excluyas.
  • Coincidencia exacta de subdocumento: { dims: { w: 12, h: 20 } } exige los mismos campos en el mismo orden; usa notación de punto como { "dims.w": 12 } para coincidir con un solo campo.
  • Ordenar arrays: un orden ascendente sobre un campo de array usa su elemento más pequeño, y uno descendente, el más grande.
  • Fechas: las consultas de rango sobre fechas necesitan fechas reales (ISODate() o {"$date": ...}). Las cadenas ISO guardadas como texto solo se comparan como cadenas.

Preguntas frecuentes

¿Necesito un servidor MongoDB para usar esto?

No. El probador incluye su propio motor de consultas escrito en JavaScript que sigue las reglas de coincidencia, proyección, ordenación y agregación de MongoDB, así que se ejecuta en tu navegador sobre los documentos que pegas. No se envía nada a ningún servidor, por lo que también es seguro para datos de ejemplo copiados de producción.

¿Qué sintaxis puedo usar?

Todo lo que escribirías en mongosh: nombres de campo sin comillas, comillas simples o dobles, expresiones regulares como /^abc/i, ObjectId("..."), ISODate("..."), new Date(...), NumberInt(...), comentarios y comas finales. También se aceptan JSON estricto y MongoDB Extended JSON ($oid, $date, $numberLong).

¿Cómo funcionan las coincidencias con arrays?

Como en MongoDB, una condición sobre un campo de array coincide si algún elemento la cumple, así que { tags: "camping" } encuentra los documentos cuyo array tags contiene camping. Usa $all para exigir varios valores, $size para una longitud exacta y $elemMatch cuando un mismo elemento deba cumplir varias condiciones a la vez. La notación de punto, como "ratings.score", accede a arrays de subdocumentos.

¿Cómo uno dos colecciones con $lookup?

Pega un objeto con un array por colección, por ejemplo {"orders": [...], "products": [...]}, elige la colección sobre la que se ejecuta el pipeline y añade una etapa como { $lookup: { from: "products", localField: "productId", foreignField: "_id", as: "product" } }. También se admite la forma con let y pipeline.

¿Los resultados serán idénticos a los de mi servidor MongoDB?

Para los operadores admitidos, los resultados siguen el comportamiento documentado de MongoDB, incluida la agrupación por tipos en las comparaciones, que null coincida con campos ausentes y las claves de ordenación de arrays. Puede haber diferencias con funciones que requieren servidor, como los índices de texto o geoespaciales, la intercalación, $where, las escrituras y el orden de salida de $group, que MongoDB tampoco garantiza. Los números usan dobles de JavaScript, así que no se conserva la precisión de NumberDecimal.

¿Por qué mi filtro no devuelve documentos?

Causas habituales: comparar una cadena con un número ("42" no es igual a 42 y los operadores de rango solo comparan valores del mismo tipo), fechas guardadas como cadenas en lugar de valores ISODate o $date, un error en el nombre del campo o en mayúsculas y minúsculas, o usar un objeto de operador donde se quería un documento anidado. El cuadro de error explica los problemas de sintaxis con la línea y la columna.

¿Puedo usar mis propios datos exportados?

Sí. Pega o sube la salida de mongoexport (tanto --jsonArray como el formato predeterminado de un documento por línea), exportaciones de Compass o cualquier array JSON. Funcionan archivos grandes de varios megabytes, pero el probador está pensado para muestras y no para colecciones completas.

¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?

Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.

Herramientas relacionadas

Ver todas las de Entornos de prueba de código →