繁体   English   中英

查询时出现mongodb本机驱动程序错误

[英]mongodb native driver error on query

我正在使用mongodb本机驱动程序编写过滤器,但是当您运行查询时却导致了我的错误。

对于此驱动程序,它没有执行程序?

执行此查询的另一种方法是什么?

exports.findAll = function(req, res) {

    MongoClient.connect(url, function(err, db) {

        var section     = req.params.section;
        var collection  = db.collection(section);

        var filter = req.query.filter ? {nameToLower: new RegExp('^' + req.query.filter.toLowerCase())} : {};
        var query = collection.find(filter);
        var count = 0;

        collection.count(filter, function (error, result) {
            count = result;
        });

        if(req.query.order) {
            query.sort(req.query.order);
        }

        if(req.query.limit) {
            query.limit(req.query.limit);

            if(req.query.page) {
                query.skip(req.query.limit * --req.query.page);
            }
        }

        query.exec(function (error, results) {
            res.json({
                count: count,
                data: results
            });
        });

    });

};

错误:

TypeError: undefined is not a function

在这种情况下最好使用异步库,因为它可以简化代码。 如果您需要运行相互依赖的多个任务,并且当它们全部完成async.series()执行其他操作,请使用async.series()模块。 以下内容说明了如何根据自己的情况进行操作:

exports.findAll = function(req, res) {
    var locals = {},
        section = req.params.section,
        filter = !!req.query.filter ? {nameToLower: new RegExp('^' + req.query.filter.toLowerCase())} : {};
    async.series([
        // Connect to DB
        function(callback) {
            MongoClient.connect(url, function(err, db) {
                if (err) return callback(err);              
                locals.collection = db.collection(section); //Set the collection here, so the next task can access it
                callback();
            });
        },
        // Get count
        function(callback) {
            locals.collection.count(filter, function (err, result){
                if (err) return callback(err);              
                locals.count = result; //Set the count here
                callback();
            });         
        },      
        // Query collection
        function(callback) {
            var cursor = locals.collection.find(filter);
            if(req.query.order) {
                cursor = cursor.sort(req.query.order);
            }

            if(req.query.limit) {
                cursor = cursor.limit(req.query.limit);

                if(req.query.page) {
                    cursor = cursor.skip(req.query.limit * --req.query.page);
                }
            }
            cursor.toArray(function(err, docs) {
                if (err) return callback(err);
                locals.docs = docs;
                callback();
            });
        }
    ], function(err) { //This function gets called after the three tasks have called their "task callbacks"
        if (err) return next(err);
        // Here locals will be populated with 'count' and 'docs'
        res.json({
            count: locals.count,
            data: locals.docs
        });
        res.render('user-profile', locals);
    });
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM