【问题标题】:nodejs mongodb driver native query issuenodejs mongodb驱动本机查询问题
【发布时间】:2016-02-20 19:25:24
【问题描述】:

如果我把表格放在下面,它会在 Node.js mongodb 中变成一个有趣的错误:

locals.collection.find(filter, req.query);

返回以下错误:

MongoError: query selector must be an object

现在如果我手动把查询工作。 这个问题困扰很久了,试了好几种方法。

locals.collection.find({slug:'somak'}, req.query);

我正在使用以下功能:

exports.findAll = function(req, res, next) {

    var locals  = {},
        section = req.params.section,
        query   = req.query,
        filter  = {};

    if(query.filter) {

        filter = query.filter.replace(/"(\w+)"\s*:/g, '$1:');
        filter = filter.replace(/["]/g, "'");

    }

    console.log(filter);


    delete query.filter;

    async.series([

        function(callback) {
            MongoClient.connect(url, function(err, db) {
                if (err) return callback(err);
                locals.collection = db.collection(section);
                callback();
            });
        },

        function(callback) {
            locals.collection.count(filter, function (err, result){
                if (err) return callback(err);
                locals.count = result;
                callback();
            });
        },

        function(callback) {

            var cursor = locals.collection.find({slug:'somak'}, req.query);

            if(req.query.page) {
                cursor = cursor.skip(Math.abs(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
        });
    });

【问题讨论】:

  • console.log(filter) 的值为{{slug:'somak'}}req.query 的值是多少?
  • 查询:{ filter: '{"title":"Test"}', limit: '5', page: '1', sort: '-posted' }

标签: node.js mongodb


【解决方案1】:

只需使用 JSON.parse:

exports.findAll = function(req, res, next) {

    var locals  = {},
        section = req.params.section,
        query   = req.query,
        filter  = {};

    if(query.filter) {
        filter = JSON.parse(query.filter);
    }

    delete query.filter;

...

【讨论】:

    猜你喜欢
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多