Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

199
Vistas
En "mongosh", ¿cómo elimino todas las bases de datos sin eliminar las típicas bases de datos "admin", "config" o "local"?

¿Qué estoy tratando de hacer?

Escribí un script llamado deleteDatabases.js y se supone que debe eliminar todas las bases de datos (además de "admin", "config" o "local") cuando esté dentro mongosh . No tengo acceso a mongo , solo mongosh .

¿Cuál es el código que actualmente intenta hacer eso?

deleteDatabases.js

 Mongo().getDBNames().forEach(function(x) { if (['admin', 'config', 'local'].indexOf(x) < 0) { Mongo().getDB(x).dropDatabase(); } })

mongosh interior:

 $ mongosh ... Using MongoDB: 4.4.1 Using Mongosh Beta: 0.4.0 > show dbs admin 184 kB config 36.9 kB database1 283 kB database2 420 kB database3 1337 kB local 90.1 kB > .load /deleteDatabases.js ... (Code from deleteDatabases.js) ... TypeError: (intermediate value).getDBNames is not a function

Antes, lo que hice para eliminar con éxito estas bases de datos fue:

 > db = db.getSiblingDB("database1") database1 > db.dropDatabase() { ok: 1, dropped: 'database1' } # Repeat for each database I want deleted.

¿Cuál espero que sea el resultado?

Espero que se eliminen todas las bases de datos además de "admin", "config" o "local".

¿Cuál es el resultado real?

Como arriba, hay un TypeError .

¿Cuál creo que podría ser el problema?

  1. La versión de mongosh que estoy usando está desactualizada y no tiene implementados esos métodos todavía o en absoluto.
  2. Mi archivo .js está implementado incorrectamente.

Me preguntaba si había una alternativa en la que sigo usando mongosh a menos que tenga que usar otra cosa.

EDITAR:

deleteDatabases.js

 db.adminCommand( { listDatabases: 1 } ).databases. map(database => database.name). filter(name => ["admin", "config", "local"].indexOf(name) == -1). forEach(function(name){db.getSiblingDB(name).dropDatabase()})

Esta es la solución que estoy usando, pero me encantaría que .map() funcione para poder ver una salida después de ejecutar el comando como lo dijo Joe.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Use el comando de administración listDatabases , map para obtener solo el nombre de la base de datos y filter para eliminar las que no desea:

 db.adminCommand("listDatabases").databases. map(d => d.name). filter(n => ["admin", "config", "local"].indexOf(n) == -1 ). map(n => db.getSiblingDB(n).dropDatabase())

Tenga en cuenta que si usa el map en lugar de forEach , obtendrá una confirmación de qué bases de datos se eliminaron con éxito, como

 [ { ok: 1, dropped: 'test' }, { ok: 1, dropped: 'test1' }, { ok: 1, dropped: 'test2' } ]
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda