mongodb-cg-lib
Version:
Library to make basic MongoDB operations
75 lines (66 loc) • 3.42 kB
JavaScript
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};