UNPKG

simple-mongodb-wrapper

Version:

A simple mongodb wrapper

157 lines (104 loc) 3.86 kB
/* Github: renzbobz 10/17/20 */ const { MongoClient } = require("mongodb"); module.exports = { database: null, mongodb_uri: null, mongodb_client: null, client: function(mongodb_uri) { this.mongodb_uri = mongodb_uri; const c = new MongoClient(this.mongodb_uri, { useUnifiedTopology: true }); this.mongodb_client = c; return c; }, open: function(dbName, callback) { if (!this.mongodb_client) throw new Error("You must set your mongodb connection uri."); return new Promise(async (resolve, reject) => { try { const _this = module.exports; const methods = { collection: (c) => { return { select: (query) => _this.select(c, query), selectAll: (query) => _this.selectAll(c, query), insert: (data, options) => _this.insert(c, data, options), insertAll: (data, options) => _this.insertAll(c, data, options), update: (query, data) => _this.update(c, query, data), updateAll: (query, data) => _this.updateAll(c, query, data), delete: (query) => _this.delete(c, query), deleteAll: (query) => _this.deleteAll(c, query), distinct: (fieldName, query) => _this.distinct(c, fieldName, query), count: (query) => _this.count(c, query) }; } }; await _this.mongodb_client.connect(); _this.database = _this.mongodb_client.db(dbName); resolve(methods); if (callback) callback(null, methods); } catch(err) { reject(err); if (callback) callback(err); console.error("Failed to connect to database !"); throw new Error(err); } }); }, close: async function() { try { await this.mongodb_client.close(); } catch(err) { console.error("Failed to close database"); throw new Error(err); } }, select: function(collectionName, query={}) { return this.database.collection(collectionName).findOne(query); }, selectAll: function(collectionName, query={}) { return this.database.collection(collectionName).find(query).toArray(); }, delete: function(collectionName, query) { return this.database.collection(collectionName).deleteOne(query); }, deleteAll: function(collectionName, query) { return this.database.collection(collectionName).deleteMany(query); }, insert: function(collectionName, query, options) { return this.database.collection(collectionName).insertOne(query, options); }, insertAll: function(collectionName, query, options) { return this.database.collection(collectionName).insertMany(query, options); }, update: function(collectionName, query, data) { return this.database.collection(collectionName).updateOne(query, data); }, updateAll: function(collectionName, query, data) { return this.database.collection(collectionName).updateMany(query, data); }, distinct: function(collectionName, fieldName, query) { return this.database.collection(collectionName).distinct(fieldName, query); }, count: function(collectionName, query) { const c = this.database.collection(collectionName); return query ? c.countDocuments(query) : c.estimatedDocumentCount(); }, getNextSequence: async function(name) { const res = await this.database.collection("counters").findOneAndUpdate( { _id: name }, { $inc: { seq: 1 } } ); return res.value.seq; } };