Last active
December 29, 2021 16:57
-
-
Save mikberg/0a73b06533927fe717ba to your computer and use it in GitHub Desktop.
MongoDB connection with async/await
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { MongoClient } from 'mongodb'; | |
import promisify from 'es6-promisify'; | |
let _connection; | |
const connect = () => { | |
if (!process.env.MONGO_CONNECTION_STRING) { | |
throw new Error(`Environment variable MONGO_CONNECTION_STRING must be set to use API.`); | |
} | |
return promisify(MongoClient.connect)(process.env.MONGO_CONNECTION_STRING); | |
}; | |
/** | |
* Returns a promise of a `db` object. Subsequent calls to this function returns | |
* the **same** promise, so it can be called any number of times without setting | |
* up a new connection every time. | |
*/ | |
const connection = () => { | |
if (!_connection) { | |
_connection = connect(); | |
} | |
return _connection; | |
}; | |
export default connection; | |
/** | |
* Returns a ready-to-use `collection` object from MongoDB. | |
* | |
* Usage: | |
* | |
* (await getCollection('users')).find().toArray().then( ... ) | |
*/ | |
export async function getCollection(collectionName) { | |
const db = await connection(); | |
return db.collection(collectionName); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
And no need to make schema because this is why mongo is used for unstructured database storage.