UNPKG

mongodb-cg-lib

Version:

Library to make basic MongoDB operations

75 lines (66 loc) 3.42 kB
const MongoClient = require('mongodb').MongoClient; const {constants, helpers, log} = require('utils-nxg-cg'); /** * * @param properties * @returns {Promise<Object>} */ const mongoTransform = async (properties) => { try { const client = new MongoClient(properties.url); await client.connect(); const dBase = client.db(properties.database); const coll = dBase.collection(properties.col); let result; let filter = typeof properties.filter === 'string'? JSON.parse(properties.filter.replaceAll("'",'"')) : properties.filter; let options = typeof properties.options === 'string'? JSON.parse(properties.options.replaceAll("'",'"')) : properties.options; if(properties.crud == "find"){ if(properties.asBase64){ result = await coll.find(filter).project(options).toArray(); result = Buffer.from(JSON.stringify(result)).toString("base64"); }else{ result = await coll.find(filter).project(options).toArray(); } if(!properties.asBase64){ if(!helpers.isObjectValid(result)){ throw Error(constants.ERROR_JSON_FORMAT);} } return result; }else if(properties.crud == "insert"){ let bodyJson = helpers.convertToObject(properties.content); const options = { ordered: true }; const result = await coll.insertMany(bodyJson, options); if(result.insertedCount > 1){ // log.info(`${result.insertedCount} documents were inserted`); return `${result.insertedCount} documents were inserted`; }else{ // log.info(`${result.insertedCount} document was inserted`); return `${result.insertedCount} document was inserted`; } }else if(properties.crud == "update"){ const updateDoc = { $set: properties.updateData, }; const result = await coll.updateMany(properties.filter, updateDoc); if(result.modifiedCount> 1){ // log.info(`Updated ${result.modifiedCount} documents`); return `Updated ${result.modifiedCount} documents`; }else{ // log.info(`Updated ${result.modifiedCount} document`); return `Updated ${result.modifiedCount} document`; } }else if(properties.crud == "delete"){ const result = await coll.deleteMany(properties.filter); if(result.deletedCount> 1){ // log.info(`Deleted ${result.deletedCount} documents`); return `Deleted ${result.deletedCount} documents`; }else{ // log.info(`Deleted ${result.deletedCount} document`); return `Deleted ${result.deletedCount} document`; } } } catch (e) { throw Error(e.toString()); } }; module.exports = {mongoTransform};