nodejs-mongodb-driver
Version:
A Simple to use MongoDB Driver for NodeJS
251 lines (233 loc) • 9.21 kB
JavaScript
/*
* This MongoDB Handler was written by depascaldc
* Copyright (C) 2020 | depascaldc - All Rights Reserved
*
* You may use, distribute and modify this code under the
* terms of the GPL-3.0 license, which unfortunately won't be
* written for another century.
*
* You should have received a copy of the GPL-3.0 license with
* this file. If not, please write to: , or visit : https://www.gnu.org/licenses/gpl-3.0.txt
*/
;
const MongoClient = require('mongodb').MongoClient;
const DRIVER_OPTIONS = {
useNewUrlParser: true,
useUnifiedTopology: true
}
module.exports.NodeJSMongoDriver = class NodeJSMongoDriver {
/**
* Get the instance of the driver by giving a connection String
* @param {String} connectionstring
*/
constructor(connectionstring) {
this.connectionstring = connectionstring
}
/**
* Get the instance of the driver by giving simply the following parameter ( wthout connection String )
* @param {String} username
* @param {String} password
* @param {String} host
* @param {Integer} port
* @param {String} authenticationDatabase
*/
static simple(username, password, host, port, authenticationDatabase) {
if (!username || !password || !host) {
throw new Error("Username Password and Host MUST be given.");
}
return new NodejsMongoDriver(`mongodb://${username}:${password}@${host}:${port != null ? port : "27017"}/${authenticationDatabase != null ? authenticationDatabase : "admin"}`)
}
/**
* Create a database at your MongoDB instance
* @param {String} databaseName
* @param {CallableFunction} callbackFunction
*/
createDatabase = (databaseName, callbackFunction) => {
MongoClient.connect(this.connectionstring + databaseName, DRIVER_OPTIONS, function (error, db) {
if (error) return callbackFunction(false, error);
db.close();
if (callbackFunction) callbackFunction(true);
});
}
/**
* Async creation of a database at your MongoDB instance
* @param {String} databaseName
* @returns {Promise<Object>}
*/
createDatabaseAsync = async (databaseName) => {
return new Promise((resolve, reject) => {
this.createDatabase(this.connectionstring, databaseName, (err, result) => {
if (err) reject(err);
else resolve(result);
});
});
}
/**
* Create a collection in your given database
* @param {String} databaseName
* @param {String} collectionName
* @param {CallableFunction} callbackFunction
*/
createCollection = (databaseName, collectionName, callbackFunction) => {
MongoClient.connect(this.connectionstring, DRIVER_OPTIONS, (error, db) => {
if (error) return callbackFunction(false, error);
var dbf = db.db(databaseName);
dbf.createCollection(collectionName, function (err, result) {
if (err) return callbackFunction(false, err);
db.close();
if (callbackFunction) callbackFunction(true)
});
})
}
/**
* Async creation of a collection in your given database
* @param {String} databaseName
* @param {String} collectionName
* @returns {Promise<Object>}
*/
createCollectionAsync = async (databaseName, collectionName) => {
return new Promise((resolve, reject) => {
this.createCollection(this.connectionstring, databaseName, collectionName, (err, result) => {
if (err) reject(err);
else resolve(result);
});
});
}
/**
* Search for an Object by give em an object to match
* @param {String} databaseName
* @param {String} collectionName
* @param {Object} queryObject
* @param {CallableFunction} callbackFunction
*/
query = (databaseName, collectionName, queryObject, callbackFunction) => {
MongoClient.connect(this.connectionstring, DRIVER_OPTIONS, (error, db) => {
if (error) return callbackFunction(false, error);
var dbf = db.db(databaseName);
dbf.collection(collectionName).find(queryObject).toArray(function (err, result) {
if (err) return callbackFunction(false, err);
db.close();
if (callbackFunction) callbackFunction(result);
});
})
}
/**
* async search for an Object by give em an object to match
* @param {String} databaseName
* @param {String} collectionName
* @param {Object} queryObject
* @returns {Promise<Object>}
*/
queryAsync = async (databaseName, collectionName, queryObject) => {
return new Promise((resolve, reject) => {
this.query(databaseName, collectionName, queryObject, (err, result) => {
if (err) reject(err);
else resolve(result);
});
});
}
/**
* Insert a new Object to the given Collection
* @param {String} databaseName
* @param {String} collectionName
* @param {Object} onject
* @param {CallableFunction} callbackFunction
*/
insertObject = (databaseName, collectionName, object, callbackFunction) => {
MongoClient.connect(this.connectionstring, DRIVER_OPTIONS, (error, db) => {
if (error) return callbackFunction(false, error);
var dbf = db.db(databaseName);
dbf.collection(collectionName).insertOne(object, (err, result) => {
if (err) return callbackFunction(false, err);
db.close();
if (callbackFunction) callbackFunction(true);
})
})
}
/**
* Async insert a new Object to the given Collection
* @param {String} databaseName
* @param {String} collectionName
* @param {Object} object
* @returns {Promise<Object>}
*/
insertObjectAsync = async (databaseName, collectionName, object) => {
return new Promise((resolve, reject) => {
this.insertObject(databaseName, collectionName, object, (err, result) => {
if (err) reject(err);
else resolve(result);
});
});
}
/**
* Delete a queried object
* @param {String} databaseName
* @param {String} collectionName
* @param {Object} queryObject
* @param {CallableFunction} callbackFunction
*/
deleteObject = (databaseName, collectionName, queryObject, callbackFunction) => {
MongoClient.connect(this.connectionstring, DRIVER_OPTIONS, (error, db) => {
if (error) return callbackFunction(false, error);
var dbf = db.db(databaseName);
dbf.collection(collectionName).deleteOne(queryObject, function (err, result) {
if (err) return callbackFunction(false, err);
db.close();
if (callbackFunction) callbackFunction(true)
});
})
}
/**
* Async delete a queried object
* @param {String} databaseName
* @param {String} collectionName
* @param {Object} queryObject
* @returns {Promise<Object>}
*/
deleteObjectAsync = async (databaseName, collectionName, queryObject) => {
return new Promise((resolve, reject) => {
this.deleteObject(databaseName, collectionName, queryObject, (err, result) => {
if (err) reject(err);
else resolve(result);
});
});
}
/**
* Update a queried object.. it inserts the given object key value pairs
* @param {String} databaseName
* @param {String} collectionName
* @param {Object} queryObject
* @param {Object} newValues
* @param {CallableFunction} callbackFunction
*/
updateObject = (databaseName, collectionName, queryObject, newValues, callbackFunction) => {
MongoClient.connect(this.connectionstring, DRIVER_OPTIONS, (error, db) => {
if (error) return callbackFunction(false, error);
var dbf = db.db(databaseName);
let obj = {
$set: newValues
}
dbf.collection(collectionName).updateOne(queryObject, obj, function (err, result) {
if (err) return callbackFunction(false, err);
db.close();
if (callbackFunction) callbackFunction(true);
});
})
}
/**
* Async Update a queried object.. it inserts the given object key value pairs
* @param {String} databaseName
* @param {String} collectionName
* @param {Object} queryObject
* @param {Object} newValues
* @returns {Promise<Object>}
*/
updateObjectAsync = async (databaseName, collectionName, queryObject, newValues) => {
return new Promise((resolve, reject) => {
this.updateObject(databaseName, collectionName, queryObject, newValues, (err, result) => {
if (err) reject(err);
else resolve(result);
});
});
}
}