仅搜索mongoose模型中的模式中的键

时间:2014-03-10 19:03:12

标签: node.js mongodb express mongoose

我正在构建一个搜索来过滤猫鼬模型的结果。除了两个之外的所有过滤器选项都需要查询到Model1。另外两个将在Model2中查询这些结果。

在我添加最后两个选项之前,我的搜索工作如下:

var filterOptions = req.body;
    for(var key in filterOptions) {
    if(filterOptions.hasOwnProperty(key)) {
        filterOptions[key] = new RegExp(filterOptions[key], "i");
    }
}

Model1.find(filterOptions, function(err, results) {
    //Use the results to search Model2.
})

我遇到了问题,如何指定只使用该模型中的键来查询Model1。 (或者,如果有一种方法可以将filterOptions对象编辑为不包含最后两个选项。)谢谢。

1 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点,但是使用像lodashunderscore这样的实用程序框架,可以在几行代码中完成:

// require lodash first
var _ = require('lodash');

(...)

// lodash way of doing the transformation into regexp objects
var filterOptions = _.transform(req.body, function(result, value, key) {
  result[key] = new RegExp(value, "i");
});

// Get all keys of Model1 from its schema
var model1keys = _.keys(Model1.schema.paths); 

// create copy of filterOptions with keys of model1    
var model1Filter = _.pick(filterOptions, model1keys);

// create copy of filterOptions without keys of model1
var model2Filter = _.omit(filterOptions, model1keys); 

Model1.find(model1Filter, function(err, results) {
    (....)
})