mongodb在nodejs下的模糊查询、灵活查询(小例子一枚)
发布于 12 年前 作者 kimady 16848 次浏览 最后一次编辑是 8 年前

查询函数调用时的工作:

//index.js
exports.problemset = function(req, res) {
  var str = req.query.search, page = parseInt(req.query.page);
  var q = {};    //定义空的查询对象
  if (str) {    //如果有搜索请求就增加查询条件
    //用正则表达式得到的pattern对title属性进行模糊查询
    //这里是搜集合里title属性包含str串的所有结果
    var pattern = new RegExp("^.*"+str+".*$");
    q.title = pattern;
  }
  if (!page) page = 1;
  var order = req.query.order;
  var sq = {}, Str, A = 'problemID', B = 'asc';
  if (order) {    //是否有排序请求
    Str = order.split('_');
    A = Str[0]; B = Str[1];
    sq[A] = B;    //关联数组增加查询条件,更加灵活,因为A是变量
  } else {
    sq.problemID = 1;    //默认排序查询条件
  }
  Problem.get (q, sq, page, function(err, problems, pn) {
    if (err) {
      req.flash('error', err);
      return res.redirect('/');
    }
    //to do ...
  });
};

查询函数的定义:

//problem.js
......//前面省略,这里用的是mongoose操作
Problem.get = function get(q, sq, n, callback) {
  problems.find(q).sort(sq).find(function(err, docs){
    if (err) {
      return callback('Problems matched failed', null, 1);
    }
    return callback(err, docs.slice((n-1)*20,n*20), docs.length);
  });
};
4 回复

谢谢你,DolphinBoy~

错误的时候记录下日志吧

非常棒,这样的话,查询就非常灵活了。。。

回到顶部