pub.aggregate = function (pipeline, options, callback) { if (arguments.length < 2) { throw new Error('missing callback parameter'); } if (arguments.length === 2) { callback = options; options = {}; } if (!lxHelpers.isArray(pipeline)) { callback(new TypeError('Param "pipeline" is of type ' + lxHelpers.getType(pipeline) + '! Type ' + lxHelpers.getType([]) + ' expected'), null); return; } options = options || {}; collection.prepare(function (err, col) { if (err) { return callback(err); } col.aggregate(pipeline, options, callback); }); };
pub.find = function (query, options, callback) { if (arguments.length === 1) { callback = query; query = {}; options = {}; } if (arguments.length === 2) { callback = options; if (isOptions(query)) { options = query; query = {}; } else { options = {}; } } if (!lxHelpers.isFunction(callback)) { throw new TypeError('Param "callback" is of type ' + lxHelpers.getType(callback) + '! Type ' + lxHelpers.getType(lxHelpers.getType) + ' expected'); } if (!lxHelpers.isObject(query)) { callback(new TypeError('Param "query" is of type ' + lxHelpers.getType(query) + '! Type ' + lxHelpers.getType({}) + ' expected'), null); return; } var mongoOptions = { skip: options.skip || 0, limit: options.limit || 0, fields: options.fields, sort: getSort(options.sort) }; query = convertToMongoId(query); collection.prepare(function (err, col) { if (err) { return callback(err); } col.find(query, mongoOptions).toArray(callback); }); };
pub.findOneById = function (id, options, callback) { if (arguments.length < 2) { throw new TypeError('Param "callback" is undefined! Type ' + lxHelpers.getType(lxHelpers.getType) + ' expected'); } if (arguments.length === 2) { callback = options; options = {}; } if (!lxHelpers.isFunction(callback)) { throw new TypeError('Param "callback" is of type ' + lxHelpers.getType(callback) + '! Type ' + lxHelpers.getType(lxHelpers.getType) + ' expected'); } if (!id || (!lxHelpers.isObject(id) && !lxHelpers.isString(id))) { callback(new TypeError('Param "id" is of type ' + lxHelpers.getType(id) + '! Type ' + lxHelpers.getType({}) + ' or ' + lxHelpers.getType('') + ' expected'), null); return; } var mongoOptions = { fields: options.fields }; var query = {}; query[key] = lxHelpers.isString(id) ? pub.convertId(id) : id; collection.prepare(function (err, col) { if (err) { return callback(err); } col.findOne(query, mongoOptions, callback); }); };
pub.count = function (query, options, callback) { if (arguments.length === 1) { callback = query; options = {}; query = {}; } if (arguments.length === 2) { callback = options; if (isOptions(query)) { options = query; query = {}; } else { options = {}; } } if (!lxHelpers.isFunction(callback)) { throw new TypeError('Param "callback" is of type ' + lxHelpers.getType(callback) + '! Type ' + lxHelpers.getType(lxHelpers.getType) + ' expected'); } if (!lxHelpers.isObject(query)) { callback(new TypeError('Param "query" is of type ' + lxHelpers.getType(query) + '! Type ' + lxHelpers.getType({}) + ' expected'), null); return; } query = convertToMongoId(query); collection.prepare(function (err, col) { if (err) { return callback(err); } col.count(query, options, callback); }); };
function replaceKeys(src) { var result = {}; function mixin(dest, source, cloneFunc) { if (lxHelpers.isObject(source)) { lxHelpers.forEach(source, function (value, key) { // replace $ at start if (key[0] === '$') { key = key.replace('$', '_dollar_'); } // replace all dots key = key.replace(/\./g, '_dot_'); dest[key] = cloneFunc ? cloneFunc(value) : value; }); } return dest; } if (!src || typeof src !== 'object' || typeof src === 'function' || src instanceof Date || src instanceof RegExp) { return src; } // wrap Errors in a new object because otherwise they are saved as an empty object {} if (lxHelpers.getType(src) === 'error') { return new ERROR(src); } // Array if (lxHelpers.isArray(src)) { result = []; lxHelpers.arrayForEach(src, function (item) { result.push(replaceKeys(item)); }); } return mixin(result, src, replaceKeys); }
pub.remove = function (query, options, callback) { var error; if (arguments.length === 1) { if (lxHelpers.isFunction(query)) { callback = query; query = {}; options = {}; } if (isMongoOptionsObject(query)) { options = query; query = {}; } } if (arguments.length === 2) { if (lxHelpers.isFunction(options)) { callback = options; options = {}; } if (isMongoOptionsObject(query)) { options = query; query = {}; } } options = options || {}; if (lxHelpers.getType(query) !== 'undefined' && !lxHelpers.isObject(query)) { error = new TypeError('Param "query" is of type ' + lxHelpers.getType(query) + '! Type ' + lxHelpers.getType({}) + ' expected'); if (callback && lxHelpers.isFunction(callback)) { callback(error, null); return; } else { throw error; } } if (options && !lxHelpers.isObject(options)) { error = new TypeError('Param "options" is of type ' + lxHelpers.getType(options) + '! Type ' + lxHelpers.getType({}) + ' expected'); if (callback && lxHelpers.isFunction(callback)) { callback(error, null); return; } else { throw error; } } query = convertToMongoId(query); if (callback && !lxHelpers.isFunction(callback)) { throw new TypeError('Param "callback" is of type ' + lxHelpers.getType(callback) + '! Type ' + lxHelpers.getType(lxHelpers.getType) + ' expected'); } collection.prepare(function (err, col) { if (err) { if (callback) { callback(err, null); } return; } col.remove(query, options, callback); }); };
pub.insert = function (doc, options, callback) { var error; if (arguments.length === 1) { callback = null; options = {}; } if (arguments.length === 2) { if (lxHelpers.isFunction(options)) { callback = options; options = {}; } } options = options || {}; if (!(lxHelpers.isObject(doc) || lxHelpers.isArray(doc))) { error = new TypeError('Param "doc" is of type ' + lxHelpers.getType(doc) + '! Type ' + lxHelpers.getType({}) + ' or ' + lxHelpers.getType([]) + ' expected'); if (callback && lxHelpers.isFunction(callback)) { callback(error, null); return; } else { throw error; } } if (arguments.length === 2 && !(lxHelpers.isObject(options) || lxHelpers.isFunction(options))) { throw new TypeError('Param "options" is of type ' + lxHelpers.getType(options) + '! Type ' + lxHelpers.getType({}) + ' or ' + lxHelpers.getType(function () { }) + ' expected'); } if (callback && !lxHelpers.isFunction(callback)) { throw new TypeError('Param "callback" is of type ' + lxHelpers.getType(callback) + '! Type ' + lxHelpers.getType(lxHelpers.getType) + ' expected'); } // var cbFunc = function (err, res) { if (!callback) { // No callback, no work return; } if (err) { return callback(err, null); } callback(null, res.ops || []); }; collection.prepare(function (err, col) { if (err) { if (callback) { callback(err, null); } return; } if (lxHelpers.isArray(doc)) { col.insertMany(doc, options, cbFunc); } else { col.insertOne(doc, options, cbFunc); } }); };