Как восстановить базу данных mongo с помощью официального провайдера Node.js mongodb? - PullRequest
0 голосов
/ 26 июня 2019

У меня есть простой случай - я хочу удалить базу данных, если она существует, тогда я хочу создать новую.Я использую node.js официальный драйвер .

Теперь я пытаюсь сделать это с помощью следующего кода:

const client = new MongoClient(dbUrl, { useNewUrlParser: true });

  client.connect(() => {
    const db = client.db();

    db.dropDatabase();
    createUsers(db);

    client.close();

    console.log(`Database "${db.databaseName}" created successfully`);
  }, (error) => {
    if (error) throw error;
  });

Но я получаю ошибку: «Топологиябыл разрушен "из mongodb.Но нет способа создать базу данных после удаления.Как правильно воссоздать базу данных?

Ответы [ 2 ]

1 голос
/ 27 июня 2019

Удалить client.close();

Смотри мой код

const {MongoClient} = require('mongodb');

MongoClient.connect('mongodb://localhost:27017', { useNewUrlParser: true }).then((client) => {
    console.log('Connected to MongoDB server')

    const dbOld = client.db('db01')

    // drop db01
    dbOld.dropDatabase().then(() => {
        console.log(`${dbOld.databaseName} drop successfully `)

        // create db01 again
        const dbNew = client.db('db01')

        console.log(`${dbNew.databaseName} recreated successfully `);

    },e => console.log(e))
})

Удачи!

0 голосов
/ 27 июня 2019

Окончательное решение на основе ответа @padeq:

/**
 * Rereates a database
 * @param {String} dbUrl Database url
 */
const recreateTestDb = (dbUrl) => {
  MongoClient.connect(dbUrl, { useNewUrlParser: true }).then((client) => {
    const currentDb = client.db();

    currentDb.dropDatabase().then(() => {
      const newDb = client.db();

      createUsers(newDb);

      client.close().then(() => {
        console.log(`New database "${newDb.databaseName}" recreated successfully`);
      });
    });
  });
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...