UNPKG

node-red-contrib-mongoql

Version:

MongoDB Query for Node-Red

80 lines (65 loc) 2.72 kB
module.exports = function (RED) { const mongoClient = require('mongodb'); function find(config) { RED.nodes.createNode(this, config); var node = this; node.on('input', function (msg) { var url = msg.url; var db_name = msg.db_name; var db_collection = msg.db_collection; var query = msg.query || {}; var sort = msg.sort || {}; var limit = msg.limit; var skip = msg.skip; if (typeof limit === 'string' && !isNaN(limit)) { limit = Number(limit); } else if (typeof limit === 'undefined') { limit = 0; } if (typeof skip === 'string' && !isNaN(skip)) { skip = skip(skip); } else if (typeof skip === 'undefined') { skip = 0; } if (url === 'undefined' || db_name === 'undefined' || db_collection === 'undefined') { delete msg.url; delete msg.db_name; delete msg.db_collection; delete msg.query; delete msg.sort; delete msg.limit; delete msg.skip; msg.status = "error"; msg.payload = "Please provide msg.url, msg.db_name and msg.db_collection"; node.send(msg); } else { delete msg.url; delete msg.db_name; delete msg.db_collection; delete msg.query; delete msg.sort; delete msg.limit; delete msg.skip; mongoClient.connect(url, { useNewUrlParser: true }).then((client) => { var db = client.db(db_name).collection(db_collection); db.find(query).sort(sort).limit(limit).skip(skip).toArray().then((result) => { client.close(); msg.status = "success"; msg.payload = result; node.send(msg); }).catch(() => { client.close(); msg.status = "error"; msg.payload = "Failed to Find" node.send(msg); }); }).catch(() => { msg.status = "error"; msg.payload = "Database or Collection Not Available"; node.send(msg); }); } }); } RED.nodes.registerType("find", find); }