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, время: 17:22. |