import { QueryResult } from "./model" interface IDictionary { [id: string]: TValue; } export async function listDatabases(client: any) { try { const databasesList = await client .db() .admin() .listDatabases({ nameOnly: true }) return databasesList.databases.map((dbName: any) => dbName.name) } catch (e) { return console.error(e) } } export async function listCollections(client: any, dbname: string) { try { const databasesList = await ( await client.db(dbname).listCollections().toArray() ).map((db: any) => db.name) return databasesList } catch (e) { return console.error(e) } } export async function listfields( client: any, dbname: string, collectionName: string ) { try { const keys: string[] = [] await client.db(dbname).collection(collectionName).find().forEach((doc: any) =>{ for (const key in doc) { if (keys.indexOf(key) < 0 && !key.startsWith('_')) { keys.push(key) } } }) return keys } catch (e) { return console.error(e) } } export async function query( client: any, dbname: string, collectionName: string, listoffields: string[], substitution: any ) { try { const projectionValues: IDictionary = {'_id': false} let res = {} Object.keys(substitution).forEach((field) => { if(!listoffields.includes(field)){ delete substitution[field] } }) if(dbname && collectionName && listoffields.length){ const result = await client.db(dbname).collection(collectionName).find({}, {projection: projectionValues }).toArray(); const objResult = new QueryResult(result, substitution, client, dbname, collectionName) res = await objResult.populate() } return res } catch (e) { return console.error(e) } }