Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

210
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!