我正在构建一个搜索来过滤猫鼬模型的结果。除了两个之外的所有过滤器选项都需要查询到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对象编辑为不包含最后两个选项。)谢谢。
答案 0 :(得分:1)
有很多方法可以做到这一点,但是使用像lodash或underscore这样的实用程序框架,可以在几行代码中完成:
// 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) {
(....)
})