UNPKG

mongodb-expressions

Version:

MongoDB expressions for fire.js

92 lines (85 loc) 2.43 kB
var MongoBaseExpression = require('./MongoBaseExpression') var mongodb = require('mongodb') function MongoFindBaseExpression() { } MongoFindBaseExpression.prototype = new MongoBaseExpression() MongoFindBaseExpression.prototype.executeFind = function(onlyOne) { var self = this if(!self.hasHint()) { self.raiseError("Mongo.Find requires a hint with the name of the collection") return } this.runInput(function(inputRes) { if(inputRes instanceof Array || typeof(inputRes) !== 'object') { self.raiseError("Mongo.Find input must be an object") return } else { var condition = null var sort = null var fields = undefined var limit = undefined var skip = undefined if(inputRes === undefined || inputRes === null) { condition = {}; } else { if(!inputRes.conditions) { condition = {} } else if(inputRes.conditions instanceof Array || typeof(inputRes.conditions) !== 'object') { self.raiseError("Mongo.Find conditions must be an object, @undefined or null") return } else { condition = inputRes.conditions } if(!inputRes.sort) { sort = {} } else if(inputRes.sort instanceof Array || typeof(inputRes.sort) !== 'object') { self.raiseError("Mongo.Find sort must be an object, @undefined or null") return } else { sort = inputRes.sort } if (inputRes.fields && !(inputRes.fields instanceof Array)) { self.raiseError("Mongo.Find fields must be an array, @undefined or null") return } else { fields = inputRes.fields } skip = inputRes.skip limit = inputRes.limit } var options = {} if(fields) { options.fields = fields } options.limit = onlyOne === true ? 1 : limit options.skip = skip self.useConnection(function(client) { var collection = new mongodb.Collection(client, self.getHintValue()); var cursor = collection.find(condition,options) if(sort) { cursor.sort(sort) } if(onlyOne === true) { cursor.nextObject(function(err, doc) { if(err) { self.raiseError(err) } else { self.end(doc) } }) } else { cursor.toArray(function(err, docs) { if(err) { self.raiseError(err) } else { self.end(docs) } }) } }) } }) } module.exports = MongoFindBaseExpression