RxDB — использовать существующую локальную базу данных

#reactjs #electron #rxdb

#reactjs #electron #rxdb

Вопрос:

Случай
Как открыть существующую базу данных?

Проблема
Я уже создаю одну базу данных с помощью RxDB.create() и создал несколько коллекций, поместил в нее некоторые документы, поэтому в другом сценарии я хочу открыть эту базу данных для выполнения некоторых запросов, но я не знаю, как это сделать. Я пытался использовать RxDB.create() с тем же именем базы данных, но он создает новую базу данных и переопределяет созданную базу данных выше.

Пример кода

  const database = await createRxDatabase({
    name: path.join(app.getPath('userData')   '/db'),
    adapter: leveldown, // the full leveldown-module
    multiInstance: false,
  });
  

Я просто не вижу подходящего способа проверить, существует ли файл .ldb и как получить ссылку на объект базы данных rxdb без создания нового.

Информация
Окружающая среда: Electron
Адаптер: LevelDB
Стек: реагировать
Пакеты: «rxdb»: «9.5.0», «leveldown»: «5.6.0», «pouchdb-adapter-leveldb»: «7.2.2»

Комментарии:

1. Эта ошибка произошла со мной, потому что по какой-то причине я несколько раз вызывал этот фрагмент кода в своем приложении. Вы уверены, что вызываете это только один раз?

Ответ №1:

слишком поздно, но стоит поделиться, потому что слишком мало ссылок на rxdb

найден обходной путь для react-native (iOS / Android) (rxdb 11.6.0)

у меня отлично работает, и данные по-прежнему сохраняются

 // database instance to be used throughout the runtime
let rxDB: RxDatabase<AppCollections>;

async function createRxDatabaseAsync() {
  // re-create RxDatabase by using the function below 
  // does not override existing data
  rxDB = await createRxDatabase<AppCollections>({
    name: 'mydatabase',
    storage: getRxStoragePouch('react-native-sqlite'),
    ignoreDuplicate: false,
  });
}

export async function initRxDatabaseAsync() {
  if (!rxDB) {
    await createRxDatabaseAsync();
  }

  // make sure we add the collection(s) only one time
  // my case is 'word' collection
  if (!rxDB.word) {
    await rxDB.addCollections({
      word: {
        schema: wordSchema,
      },
    });
  }
  return rxDB;
}