mongodb-expressions
Version:
MongoDB expressions for fire.js
92 lines (85 loc) • 2.43 kB
JavaScript
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