Mongodb, Node. Как узнать, что коллекции нет?
Пытаюсь сваять что то на node и mongo.
Спецом не являюсь ни в том, ни в другом. Поэтому сразу куча затык. Нужно определить есть коллекция в базе или нет. Потому, что когды пытаюсь удалить несуществующую, вылетают ошибки. А как определить, что ее нет Такой код (последовательность действий) let client, database, col; client = new MongoClient(url); await client.connect(); database = client.db(names.database) col = database.collection('docs'); await col.insertOne(doc); // создаю коллекцию и записываю документ await client.close(); // ............ // Смотрю в компасе. Коллекция есть, документ есть // ............. client = new MongoClient(url); await client.connect(); database = client.db(names.database) await database.dropCollection('docs') // Удаляю коллекцию await client.close(); // ............ // Смотрю в компасе. Коллекции нет // ............ client = new MongoClient(url); await client.connect(); database = client.db(names.database) col = database.collection('docs'); console.log(col) // чего то возвращает if (col) { database.dropCollection('docs') //Выдает ошибку 'NamespaceNotFound' типа нет такой коллекции. } await client.close(); Весь вопрос в строках 23-25. Почему, хотя коллекции нет database.collection('docs') что то возвращает. И как тогда определить, что ее нет? |
Цитата:
db.getCollectionNames().indexOf('userDoc') Вернет порядковый номер коллекции userDoc из массива коллекций текущей БД или -1, если таковой в БД нет. P.S. Команду я давал в оболочке Монго... Если используется драйвер - нужно смотреть во что это он "переделывает". |
voraa, еще вот так можно проверить...
db['userDoc1'].findOne({}) Вернет null, если коллекции userDoc1 нет или она "пуста"... |
Пробовал. Увы
database.getCollectionNames() TypeError: database.getCollectionNames is not a function Цитата:
await database.collection(name).estimatedDocumentCount() пока сделал. Но вопрос в том, есть она вообще? Можно ли ее удалить. Надо ли ее создавать? |
Цитата:
Цитата:
|
Цитата:
|
Цитата:
|
Извращение какое то. Список имен всех коллекций.
let cnames = (await database.collections()).map(c => c.namespace.split('.')[1]) |
Цитата:
Просто там много чего возвращается, а тебе нужны только имена. |
Часовой пояс GMT +3, время: 21:35. |