Esempio n. 1
0
    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);
        });
    };
Esempio n. 2
0
    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);
        });
    };
Esempio n. 3
0
    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);
        });
    };
Esempio n. 4
0
    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);
        });
    };
Esempio n. 5
0
    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);
    }
Esempio n. 6
0
    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);
        });
    };
Esempio n. 7
0
    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);
            }
        });
    };