如何使用参数从函数中使用mongoose进行查询?

时间:2016-01-03 16:24:39

标签: mongodb express mongoose

我尝试使用如下函数进行mongoose查询:

    /*
     * @param {function} Model - Mongoose Model
     * @param {String} searchText- Text that will be used to search for Regexp
     * @param {String} Key- key to search into a Model
     * @param {object} res - Response of node.js / express
    */

function _partialSearch (Model, searchText, key, res) {
  var search = new RegExp(searchText, "i");

  Model.find({ key : { $regex : search } })
  .exec(function (err, docs) {
    if(err) log(err);
    else {
      res.json(docs);
    }
  })
}

我的问题是查询采用参数键文字并像这样搜索:

我需要这个:

_partialSearch(Products, 'banana', 'fruts', res)

我认为:

   Products.find({ 'fruts' : 'banana})

但我明白了:

Products.find({ key : 'banana})

2 个答案:

答案 0 :(得分:1)

使用 bracket notation 动态创建查询对象,以便按以下步骤重构您的功能:

function _partialSearch (Model, searchText, key, res) {
    var search = new RegExp(searchText, "i"),
        query = {};
    query[key] = { $regex : search };

    Model.find(query)
         .exec(function (err, docs) {
            if(err) log(err);
            else {
                res.json(docs);
            }
         });
}

答案 1 :(得分:0)

您无法直接将变量用作对象键,但假设您正在使用Node.js 4.0或更高版本,则可以使用其对computed property names的ES6支持来围绕{Can't find the 'libpq-fe.h header when trying to install pg gem执行此操作括号中的1}}:

key