MongoDB Overview about your field names

MongoDB Overview about your field names

If you have a large collection with a lot of fields inside, then there is command where you can check all your field names.

Why I should check it?

Human aren’t perfect, human makes errors. Yes, your boss does not want to hear this, but in fact every one makes errors.

db.ciudad.aggregate([
  { $project: { array: { $objectToArray: "$$ROOT" } } },
  { $unwind: "$array" },
  { $group: { _id: null, fields: { $addToSet: "$array.k" } } },
  { $unwind: "$fields" },
  { $sort: { "fields": 1 } },
  { $group: { _id: null, sortedFields: { $push: "$fields" } } }
])

In my case I get this output of my Spanish database (database about Spanish cities)

‚\t‘,
‚Abogado‘,
‚Academia de inglés‘,
‚Acuario‘,
‚Aeropuerto‘,
‚Agencia de alquiler de equipos‘,
‚Agencia de excursiones en canao y kayak‘,
‚Agencia de inglés‘,
‚Agencia de marketing‘,
‚Agencia de seguro‘,
‚Agencia de seguros‘,
‚Agencia de viajes‘,
‚Agencia inmobiliaria‘,
‚Agricultural production‘,
‚Albergue‘,
‚Alcalde‘,
‚Almacén‘,
‚Alojamiento‘,
‚Altitud‘,
‚Altitud Max‘,
‚Altitud Min‘,
‚Altitud max‘,
‚Altitud min‘,
‚Amazon‘,
‚Aparcamiento‘,
‚Apartamento‘,
‚Aquarium‘,
‚Archivo‘,
‚Arquitecto‘,
‚Arrecife barrera de Posidonia‘,
‚Arroyo‘,
‚Artesania‘,
‚Ascensorista‘,
‚Aserradero‘,
‚Asociación sociocultural‘,
‚Asociación u organización‘,
‚Astronómico‘,
‚Atracción turística‘,
‚Auditorio‘,
‚Audiólogo‘,
‚Autoescuela‘,
‚Autopista‘,
‚Ayuntamiento‘,
‚Azpeitiko Justizia Jauregia‘,
‚Balneario‘,
‚Baloncesto‘,
‚Balonmano‘,
‚Banco‘,
‚Bar‘,
‚Barrio‘,
‚Barrios‘,
‚Base militar‘,
‚Bazar‘,
‚Baños públicos‘,
‚Biblioteca‘,
‚Biblioteca universitaria‘,
‚Bicicleta‘,
‚Bilblioteca‘,
‚Bisutería‘,
‚Bodega‘,
‚Bolera‘,
‚CN‘,
‚Cadena de televisión‘,
‚Cafeteria‘,
‚Cafetería‘,
‚Cafeterías‘,
‚Café‘,
‚Cajeros automáticos‘,
‚Camping‘,
‚Campo‘,
‚Campo de fútbol‘,
‚Campo de rugby‘,
‚Cancha de baloncesto‘,
‚Capilla‘,
‚Carnicería‘,
‚Carpintero‘,
‚Carpintería‘,
‚Carpintería metálica y de aluminio‘,
‚Casa Rural‘,
‚Casa cultural‘,
‚Casa rural‘,
‚Casa señorial‘,
‚Cascada‘,
‚Casino‘,
‚Castillejo‘,
‚Castillo‘,
‚Catedral‘,
‚Cementerio‘,
‚Central elétrica‘,
‚Centro Comercial‘,
‚Centro Deportivo‘,
‚Centro Médico‘,
‚Centro asistencial de día‘,
‚Centro comercial‘,
‚Centro comunitario‘,
‚Centro cultural‘,
‚Centro de Cultura‘,
‚Centro de Especialidades‘,
‚Centro de Recreo‘,
‚Centro de buceo‘,
‚Centro de deportes de aventura‘,
‚Centro de formación‘,
‚Centro de formarción‘,
‚Centro de jardinería‘,
‚Centro de ocio‘,
‚Centro de ocio infantil‘,
‚Centro de pilates‘,
‚Centro de reciclaje‘,
‚Centro de salud‘,
‚Centro de salud y bienestar‘,
‚Centro de visitantes‘,
‚Centro deportivo‘,
‚Centro juvenil‘,
‚Centro médico‘,
‚Centro sociocultural‘,
‚Cervecería‘,
‚Cine‘,
‚Circuito de BMX‘,
‚Ciudad‘,
‚Ciudad en catalán‘,
‚Ciudad en euskera‘,
‚Ciudad en gallego‘,
‚Ciudad en sanabrés‘,
‚Ciudad en valenciano‘,
‚Clima‘,
‚Club Kayak‘,
‚Club Naútico‘,
‚Club de golf‘,
‚Club deportivo‘,
‚Clínica ambulatoria‘,
‚Clínica de fisioterapia‘,
‚Coches‘,
‚Codigo postal‘,
‚Colegio privado‘,
‚Colegio público‘,
‚Com autónoma‘,
‚Comarca‘,
‚Comercio‘,
‚Comida a domicillio‘,
‚Comisaria de policía‘,
‚Comisaría de policía‘,
‚Concesionario de automóviles‘,
‚Conservación del patrimonio‘,
‚Consoltora informática‘,
‚Contratista‘,
‚Contratista de piscinas‘,
‚Convento‘,
‚Cooperativa agropecuaria‘,
‚Cooperativa de ahorro y crédito‘,
‚Coordinates‘,
‚Copistería‘,
‚Cueva‘,
‚Cultura‘,
‚Código postal‘,
‚Dehesa‘,
‚Demografía‘,
‚Densidad‘,
‚Dentista‘,
‚Departamento municipal de turismo‘,
‚Deporte‘,
‚Deportes‘,
‚Descripción‘,
‚Dique‘,
‚Discoteca‘,
‚Diseñador gráfico‘,
‚Distribuidor de acero‘,
‚Economía‘,
‚Elecciones 2019‘,
‚Elecciones 2023‘,
‚Electricista‘,
‚Embalse‘,
‚Empresa‘,
‚Empresa constructora‘,
‚Empresa de aguas minerales‘,
‚Empresa de construcción‘,
‚Empresa de hormigonado‘,
‚Empresa de industria‘,
‚Empresa de medios de comunicación‘,
‚Empresa de mensajería‘,
‚Empresa de mármoles‘,
‚Empresa de organización de eventos‘,
‚Empresa de productes petroliers‘,
‚Empresa de software‘,
‚Empresa de suministros industriales‘,
‚Empresa de transporte por camión‘,
‚Empresa minera‘,
‚Energia‘,
‚Energía ecológica‘,
‚Escalada‘,
„Escola Oficial d’Idiomes de Figueres“,
‚Escuela‘,
‚Escuela de arte dramático‘,
‚Escuela de equitación‘,
‚Escuela de musica‘,
‚Escuela de música‘,
‚Escuela de surf‘,
‚Escultura‘,
‚Estación‘,
‚Estación de carga‘,
‚Estación de carga de vehículos eléctricos‘,
‚Estación de esquí‘,
‚Estación de ferrocarril inclinada‘,
‚Estación de pesaje‘,
‚Estadio‘,
‚Estanco‘,
‚Estudio de grabación‘,
‚Etimologia‘,
‚Etimología‘,
‚Farmacia‘,
‚Farmacia Jiménez‘,
‚Farmàcia‘,
‚Faro‘,
‚Fauna‘,
‚Ferreteria‘,
‚Ferretería‘,
‚Festa‘,
‚Fiesta‘,
‚Fiesta mayor‘,
‚Finca‘,
‚Fisioterapeuta‘,
‚Fisioterapia‘,
‚Floristeria‘,
‚Floristería‘,
‚Fonte‘,
‚Fotografía‘,
‚Fotógrafo‘,
‚Frontera‘,
‚Fruteria‘,
‚Frutería‘,
‚Fuente‘,
‚Fuente de agua potable‘,
‚Fundación‘,
‚Funeraria‘,
‚Funeraría‘,
‚Fábrica‘,
‚Fábrica de automóviles‘,
‚Fábrica de conservas‘,
‚Fábrica de maquinaria‘,
‚Fábrica de maquinaria agrícola‘,
‚Fábrica de muebles‘,
‚Fútbol‘,
‚Galería de arte‘,
‚Ganadero‘,
‚Gasolinera‘,
‚Gastroenterólogo‘,
‚Geografía‘,
‚Gimnasio‘,
‚Grandes almacenes‘,
‚Granja‘,
‚Granja avícola‘,
‚Granja escuela‘,
‚Guardería canina‘,
‚Guardia Civil‘,
‚Hamburguesería‘,
‚Heladería‘,
‚Herbolario‘,
‚Herrero‘,
‚Hipermercado‘,
‚Historia‘,
‚Historia:‘,
‚Historia_2‘,
‚Hospital‘,
‚Hospital privado‘,
‚Hospital universitario‘,
‚Hospitales‘,
‚Hostal‘,
‚Hotel‘,
‚ISO_3166_2‘,
‚Igelesia‘,
‚Iglesia‘,
‚Iglesia católica‘,
‚Imprenta‘,
‚Información‘,
‚Informática‘,
‚Inspección técnica de vehículos‘,
‚Institución religiosa‘,
‚Instituto de investigación‘,
‚Internet‘,
‚Isla‘,
‚Jardin‘,
‚Jardín‘,
‚Jardín Botánico‘,
‚Jardín botánico‘,
‚Jefatura de policía‘,
‚Joyería‘,
‚Juntas Generales‘,
‚Laboratorio dental‘,
‚Ladera‘,
‚Lavandería‘,
‚Libería‘,
‚Libraría‘,
‚Libreria‘,
‚Librería‘,
‚Librerías‘,
‚Linea‘,
‚Locutorio‘,
‚Lonja de pescado‘,
‚Luftfeuchtigkeit %‘,
‚Lugar de culto‘,
‚Lugar de interés histórico‘,
‚Lugar de peregrinación‘,
‚LugaresHistoricos‘,
‚Líneas‘,
‚Mancomunidad‘,
‚Matadero‘,
‚Mayorista‘,
‚Mayorista de frutas y hortalizas‘,
‚Mercado‘,
‚Mercado de productos del campo‘,
‚Merceria‘,
‚Mercería‘,
‚Merindad‘,
‚Militar‘,
‚Mirador‘,
‚Molino‘,
‚Molino de agua‘,
‚Monasterio‘,
‚Montaña‘,
‚Monumento‘,
‚Muiño de auga‘,
‚Museo‘,
‚Museo al aire libre‘,
‚Museo arqueológico‘,
‚Museo de arte‘,
‚Museo de ciencias‘,
‚Museo etnográfico‘,
‚Médico‘,
‚Naturaleza‘,
‚Notaría‘,
‚Noticias‘,
‚Núcleo de población‘,
‚Núcleos de población‘,
‚Núcleos de poplación‘,
‚Oficina de Correos‘,
‚Oficina de Tramitació del DNI i del Passaport‘,
‚Oficina de Tráfico‘,
‚Oficina de administración tributaria‘,
‚Oficina de correos‘,
‚Oficina de empleo‘,
‚Oficina de empresas‘,
‚Oficina de gobierno local‘,
‚Oficina de la Administración‘,
‚Oficina de la Seguridad Social‘,
‚Oficinas de empresa‘,
‚Oficinas de empresas‘,
‚Oficinas del ayuntamiento‘,
‚Organización de gays y lesbianas‘,
‚Organización sin ánimo de lucro‘,
‚Pabellón‘,
‚Panaderia‘,
‚Panadería‘,
‚Papelería‘,
‚Parada‘,
‚Parc‘,
‚Parque‘,
‚Parque Botánico‘,
‚Parque acuático‘,
‚Parque de Bomberos‘,
‚Parque de atracciones‘,
‚Parque de bomberos‘,
‚Parque deportivo‘,
‚Parque infantil‘,
‚Parque temático‘,
‚Parques‘,
‚Parroquia‘,
‚Partido judical‘,
‚Partido judicial‘,
‚Partido político‘,
‚Pasteleria‘,
‚Patrimonio‘,
‚Patron‘,
‚Patrona‘,
‚Patrón‘,
‚Pedanías‘,
‚Peluqueria‘,
‚Peluquería‘,
‚Pintura‘,
‚Piscina‘,
‚Piscina cubierta‘,
‚Piscina fluvial‘,
‚Piscina fluviales‘,
‚Pista de Pádel‘,
‚Pista de Tennis‘,
‚Pista de tenis‘,
‚Pizzeria‘,
‚Pizzería‘,
‚Planta depuradora‘,
‚Playa‘,
‚Playa Fluvial‘,
‚Playa fluvial‘,
‚Plaza de Toros‘,
‚Población‘,
‚Podólogo‘,
‚Policia‘,
‚Polideportivo‘,
‚Polígono industrial‘,
‚Ponte‘,
‚Praia‘,
‚Predom. ling‘,
‚Presupuesto‘,
‚Previsión‘,
‚Proveedor de aluminio‘,
‚Proveedor de contenedores‘,
‚Proveedor de materiales de construcción‘,
‚Proveedor de servicios de Internet‘,
‚Proveedores de la industria metalúrgica‘,
‚Provincia‘,
‚Psicólogo‘,
‚Puente‘,
‚Puerto‘,
‚Puerto deportivo‘,
‚Punto sanitario autoservicio‘,
‚Quesería‘,
‚Recinto para eventos‘,
‚Refinería de Repsol‘,
‚Refugio‘,
‚Relojeria‘,
‚Residencia de ancianos‘,
‚Residencia geriátrica‘,
‚Residencia militar‘,
‚Restaurant‘,
‚Restaurante‘,
‚Río‘,
‚Sala de conciertos‘,
‚Sanidad‘,
‚Santuario‘,
‚Seguridad y salud ocupacional‘,
‚Servicio agrícola‘,
‚Servicio de alquiler de aeronaves‘,
‚Servicio de alquiler de bicicletas‘,
‚Servicio de alquiler de kayaks y canoas‘,
‚Servicio de ambulancias‘,
‚Servicio de antenas‘,
‚Servicio de distribución‘,
‚Servicio de envíos‘,
‚Servicio de ferry‘,
‚Servicio de gestión de residuos‘,
‚Servicio de grúa‘,
‚Servicio de jardinería‘,
‚Servicio de lavado de coches‘,
‚Servicio de lavandería‘,
‚Servicio de logística‘,
‚Servicio de mensajería‘,
‚Servicio de rescate de animales‘,
‚Servicio de transporte‘,
‚Servicio de transporte de mercancías‘,
‚Servicio sociales‘,
‚Servicios de limpieza‘,
‚Skate park‘,
‚Stadt‘,
‚Subestación elétrica‘,
‚Superficie‘,
‚Supermercado‘,
‚Taller de automóviles‘,
‚Taller de bicicletas‘,
‚Taller de camiones‘,
‚Taller de chapa y pintura‘,
‚Taller de maquinaria‘,
‚Taller de metalurgia‘,
‚Taller de reparación de automóviles‘,
‚Taller de reparación de automóviless‘,
‚Taller de reparación de embarcaciones‘,
‚Taller mecánico‘,
‚Tanatorio‘,
‚Teatro‘,
‚Temperature high‘,
‚Temperature low‘,
‚Terminal Corporativa‘,
‚Terminal de contenidors‘,
‚Terminal de ferry‘,
‚Tienda‘,
‚Tienda aire acondicionado‘,
‚Tienda de Informática‘,
‚Tienda de alimentación‘,
‚Tienda de alimentos naturales‘,
‚Tienda de alimentos para animales‘,
‚Tienda de animales‘,
‚Tienda de artículos de fontanería‘,
‚Tienda de artículos de pesca‘,
‚Tienda de artículos para bebés‘,
‚Tienda de artículos para el hogar‘,
‚Tienda de artículos para piscinas‘,
‚Tienda de audífonos‘,
‚Tienda de belleza y salud‘,
‚Tienda de bicicletas‘,
‚Tienda de bisutería‘,
‚Tienda de bolsos‘,
‚Tienda de bricolaje‘,
‚Tienda de cerámica‘,
‚Tienda de congelados‘,
‚Tienda de cortinas‘,
‚Tienda de delicatessen‘,
‚Tienda de deportes‘,
‚Tienda de discos‘,
‚Tienda de electrodomésticos‘,
‚Tienda de electrónica‘,
‚Tienda de esquí‘,
‚Tienda de golosinas‘,
‚Tienda de iluminación‘,
‚Tienda de informática‘,
‚Tienda de instrumentos musicales‘,
‚Tienda de jamones‘,
‚Tienda de lana‘,
‚Tienda de lencería‘,
‚Tienda de lotería‘,
‚Tienda de material de oficina‘,
‚Tienda de materiales para la construcción‘,
‚Tienda de muebles‘,
‚Tienda de muebles de cocina‘,
‚Tienda de neumáticos‘,
‚Tienda de paints‘,
‚Tienda de persianas‘,
‚Tienda de pinturas‘,
‚Tienda de productos agrícolas‘,
‚Tienda de regalos‘,
‚Tienda de repuestos para automóviles‘,
‚Tienda de ropa‘,
‚Tienda de ropa de hombre‘,
‚Tienda de ropa de mujer‘,
‚Tienda de ropa de playa‘,
‚Tienda de serigrafía‘,
‚Tienda de sofá‘,
‚Tienda de sofás‘,
‚Tienda de surf‘,
‚Tienda de telas‘,
‚Tienda de vino‘,
‚Tienda de vinos‘,
‚Tienda de windsurf‘,
‚Tienda de zapatos‘,
‚Tienda general‘,
‚Tienda organica‘,
‚Timeline‘,
‚Toponimia‘,
‚TransportHistorico‘,
‚Trasteros y almacenamiento‘,
‚Trinquete‘,
‚URGENCIAS Hospital de Sagunto‘,
‚Universidad‘,
‚Universidad a distancia‘,
‚Universidad popular‘,
‚Universidad privada‘,
‚Universidad pública‘,
‚Unversidad‘,
‚Villa‘,
‚Vivero‘,
‚Viviendas‘,
‚Volcán‘,
‚WFS Serveis Aeroportuaris – BCN‘,
‚Zapatería‘,
‚Zona de barbacoa‘,
‚Zona de picnics‘,
‚Zona de pícnic‘,
‚Zona de senderismo‘,
‚Zoo‘,
‚_id‘,
‚ayuntamiento_noticias‘,
‚curiosidades‘,
‚embalse‘,
‚espacio‘,
‚feuchte tage‘,
‚rainfall mm‘,
’snow‘,
’snow mm‘,
‚tienda de muebles‘,
‚water‘,
‚wind kph‘,
‚Óptica‘
]
}
]

People, who can speak Spanish, now sees that I have made a lot of errors. In a database with more than 1000 entries, it is normal. Yes, I know your boss does not want to see it, that you are a normal human.

A little python script to correct the wrong field names

Yes, of course, you can correct it with a Python script. That is the easiest way to solve the problem and your boss will be happy again.

The general command in MongoDB is $rename

import pymongo

client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["Espana"] # bzw. deine Datenbank
collection = db["ciudad"]

# Mapping von FALSCH -> RICHTIG
renames = {
    # Akzente & Tippfehler
    "Pedanías": "Núcleos de población"
}

# Führe das Rename für alle Einträge aus
for alt, neu in renames.items():
    res = collection.update_many(
        {alt: {"$exists": True}},
        {"$rename": {alt: neu}}
    )
    if res.modified_count > 0:
        print(f"Bereinigt: '{alt}' -> '{neu}' ({res.modified_count} Dokumente)")

print("Fertig mit dem Frühlingsputz!")
Die Kommentare sind geschlossen.